Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 值在运行时未设置,但在热重启后设置_Flutter_Dart - Fatal编程技术网

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 in
AnimatedCircularChart
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;
    });
  }
}