Sqlite FutureBuilder没有';不触摸屏幕就不能工作
我有以下情况:屏幕上有一个按钮,它将数据添加到数据库中。还有future builder,它具有futureSqlite FutureBuilder没有';不触摸屏幕就不能工作,sqlite,flutter,Sqlite,Flutter,我有以下情况:屏幕上有一个按钮,它将数据添加到数据库中。还有future builder,它具有futuregetDataFromDB。当我通过按钮添加数据时,future builder不会从DB获取数据。当我在屏幕上进行几次滑动时,它可以正常工作。怎么了代码如下: FutureBuilder( future: DatabaseManager().findAllCaloriesForSelectedDate(currentDate),
getDataFromDB
。当我通过按钮添加数据时,future builder不会从DB获取数据。当我在屏幕上进行几次滑动时,它可以正常工作。怎么了代码如下:
FutureBuilder(
future: DatabaseManager().findAllCaloriesForSelectedDate(currentDate),
builder: (context, AsyncSnapshot<int> snapshot) {
if (snapshot.hasData) {
_caloriesCurrent = snapshot.data;
return AnimatedCircularChart(
size: Size(constraints.maxWidth * 0.8, constraints.maxWidth * 0.8),
initialChartData: <CircularStackEntry>[
CircularStackEntry(
<CircularSegmentEntry>[
CircularSegmentEntry(
currentProgress,
Color(AppColors.brandViolet),
),
CircularSegmentEntry(
100 - currentProgress,
Color(AppColors.layoutBackgroundColor),
),
],
),
],
chartType: CircularChartType.Radial,
edgeStyle: SegmentEdgeStyle.round,
percentageValues: true,
);
} else {
return Container();
}
},
)
FutureBuilder(
future:DatabaseManager().FindAllColoriesForSelectedDate(currentDate),
生成器:(上下文,异步快照){
if(snapshot.hasData){
_卡路里电流=snapshot.data;
返回动画循环艺术(
大小:大小(constraints.maxWidth*0.8,constraints.maxWidth*0.8),
初始图表数据:[
循环跟踪条目(
[
循环段分录(
当前进展,
颜色(AppColors.brandViolet),
),
循环段分录(
100-目前的进展,
颜色(AppColor.layoutBackgroundColor),
),
],
),
],
图表类型:圆形图表类型。径向,
edgeStyle:分段edgeStyle.round,
percentageValues:true,
);
}否则{
返回容器();
}
},
)
我将感谢任何帮助。提前谢谢 您的代码有两个问题:
如果您没有读过BloC体系结构,您应该读一下。您的代码有两个问题:
如果您没有读过BloC架构,您应该阅读。请提供完整上下文的完整构建方法或小部件。请提供完整上下文的完整构建方法或小部件。非常感谢,但我不太理解您的第一点。你的意思是我应该将我的
NutritionDataManager().GetDiscips(currentDate)
移动到返回Future
的单独方法,还是我错了?@SergeiMikhailovskii你调用FindAllCalcalIEsforSelectedDate方法返回你的Future对象。您不应该在内部构建中调用此方法。相反,在initState或其他地方调用它,并将结果Future对象存储在State中。但是如果我更新数据,当屏幕重建时,我需要显示更新的数据。在这种情况下我能做什么?@SergeiMikhailovskii您只需使用setState设置一个新的未来值-FutureBuilder将从State重建新的未来。但是我建议您使用StreamBuilder,这样您就可以向流中添加新数据,小部件就会重新生成。据我所知,StreamBuilder的工作原理与总线一样,不是吗?因此,我们将值放在一个小部件中,并将其放在另一个小部件中。但我怎样才能将回调传递给另一个我输入这个值的小部件呢?非常感谢,但我一点也不理解你的第一点。你的意思是我应该将我的NutritionDataManager().GetDiscips(currentDate)
移动到返回Future
的单独方法,还是我错了?@SergeiMikhailovskii你调用FindAllCalcalIEsforSelectedDate方法返回你的Future对象。您不应该在内部构建中调用此方法。相反,在initState或其他地方调用它,并将结果Future对象存储在State中。但是如果我更新数据,当屏幕重建时,我需要显示更新的数据。在这种情况下我能做什么?@SergeiMikhailovskii您只需使用setState设置一个新的未来值-FutureBuilder将从State重建新的未来。但是我建议您使用StreamBuilder,这样您就可以向流中添加新数据,小部件就会重新生成。据我所知,StreamBuilder的工作原理与总线一样,不是吗?所以,我们把值i