【发布时间】:2021-12-12 06:44:07
【问题描述】:
我开发了一个应用程序来组织晚餐的快捷菜单。有 6 个食谱作为列表图块。我也有记分牌。记分牌显示随机生成的菜单的总值。分数是根据菜谱的一些数值属性计算出来的。
问题是我无法在加载所有配方图块后更新记分牌。当我打电话时
setState(){
_score = _getScore();
}
所有小部件都被重建。然后,所有的配方小部件都用新配方重新绘制。
它会导致无限循环的重建。
_score 变量用于记分板小部件。
问题是, 如何只更新记分板小部件而不触发所有小部件重新进行?
---- 编辑/添加----
截图及相关代码如下。
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(
children: <Widget>[
_buildScoreboard(),
_buildRecipeTile(context, RecipeType.maindish),
_buildRecipeTile(context, RecipeType.soup),
_buildRecipeTile(context, RecipeType.salad),
_buildRecipeTile(context, RecipeType.dessert),
_buildRecipeTile(context, RecipeType.bakery),
_buildRecipeTile(context, RecipeType.drink),
],
),
),
);
}
我要更新Text('$_score')
Widget _buildScoreboard() {
return Text('$_score');
}
配方图块小部件中有一个 FutureBuilder。而且,我们在加载每个图块后计算分数:_score = _getScore();
Widget _buildRecipeTile(BuildContext context, RecipeType recipeType) {
CollectionReference cr = FirebaseFirestore.instance.collection('meals');
return FutureBuilder<DocumentSnapshot>(
future: cr.where("type", isEqualTo: recipeType.index).get().then((value) {
return value.docs.elementAt(random.nextInt(value.size));
}),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
...
_score = _getScore();
...
}
);
}
【问题讨论】: