Flutter 值在运行时未设置,但在热重启后设置
我有以下情况:在我的Flutter 值在运行时未设置,但在热重启后设置,flutter,dart,Flutter,Dart,我有以下情况:在我的build方法中有一个FutureBuilder: FutureBuilder<List>( future: NutritionDataManager().getDishes(), initialData: List(), builder: (context, snapshot) { if (snapshot.hasData) { L
build
方法中有一个FutureBuilder
:
FutureBuilder<List>(
future: NutritionDataManager().getDishes(),
initialData: List(),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<Dish> dishes = snapshot.data.map((dish) {
return Dish(dish.id, dish.icon, dish.name, dish.gram, dish.calories, dish.time);
}).toList();
countTotalCalories(dishes);
return SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return NutritionListItemWidget(
dish: snapshot.data[index],
);
},
childCount: snapshot.data.length,
),
);
} else {
return Container();
}
},
)
你有没有试着把
_currentCalories = calSum;
在设置状态下?如果您无法共享
动画循环艺术
,问题可能是这样的
如果您没有像这样使用动画循环艺术
小部件,请告诉我,我会更新答案
这是你的用法
AnimatedCircularChart(
...
holeLabel: "$_currentCalories", // ***
...
)
我希望像这样的动画循环艺术
您需要像这样重写didUpdateWidget
使用下面的代码可能会对您有所帮助。将_currentCarries放入setState方法中
countTotalCalories(List<Dish> dishes) {
int calSum = 0;
dishes.forEach((dish) => calSum += dish.calories);
if (mounted){
setState(() {
_currentCalories = calSum;
});
}
}
counttotalcarries(列出菜肴){
int-calSum=0;
菜肴.forEach((菜肴)=>calSum+=菜肴.卡路里);
如果(已安装){
设置状态(){
_CurrentCarries=calSum;
});
}
}
是,但在这种情况下,我会出现以下错误:在生成FutureBuilder(dirty,state:_FutureBuilderState#c3a6b)时抛出以下断言:在生成过程中调用setState()或markNeedsBuild()。
使用检查此情况的if子句将其包装。mounted@MuratAslan,不幸的是没有帮助。您可以共享另一个小部件吗,可能您正在使用statefulWidget right Unchanged place inAnimatedCircularChart
right?,如果是,您能否共享AnimatedCircularChart
请获取相同的信息exception@SergeiMikhailovskii我认为数据加载到菜品列表需要时间,但在获取数据之前调用CountTotalCarries函数。这就是为什么您会得到零值,当您按下热重启时,数据已经被获取。使用调试器查找数据流。
AnimatedCircularChart(
...
holeLabel: "$_currentCalories", // ***
...
)
countTotalCalories(List<Dish> dishes) {
int calSum = 0;
dishes.forEach((dish) => calSum += dish.calories);
if (mounted){
setState(() {
_currentCalories = calSum;
});
}
}