我正在使用 aFutureBuilder
从数据库调用中构建未来的项目列表。出于某种原因,当我两次调用运行时,这是有问题的setState()
。FutureBuilder
我制作了我的代码的简化版本来说明这个问题:
void initState() {
super.initState();
futureIng = db.getIngredients();
}
Widget build(BuildContext context) {
return Column(
children: [
getButton(),
getDeleteButton(),
FutureBuilder<List<IngredientSql>>(
future: futureIng,
builder: (BuildContext context, AsyncSnapshot<List<IngredientSql>> snapshot) {
if (snapshot.hasData && snapshot.data != null) {
if (snapshot.data.isEmpty) {
return Text("Nothing yet", style: TextStyle(color: Colors.white));
}
return Text(getList(snapshot.data));
} else {
return CircularProgressIndicator();
}
},
),
],
);
}
}
void insertIngredient() {
Future<bool> success = db.insertIngredient("banana2"));
success.then((success) {
if (success) {
setState(() {
futureIng = db.getIngredients();
});
});
}
void deleteIngredient() {
var future = db.deleteIngredient("banana2");
future.then((value) {
futureIng = db.getIngredients();
futureIng.then((value) {
setState(() {
print("asd");
});
});
});
}
按getButton()
来电insertIngredient()
和按getDeleteButton()
来电deleteIngredient()
。
所以首先我插入“banana2”成分,然后按删除将其删除。正如您在deleteIngredient()
函数中看到的那样,该项目被删除,然后我更新未来并调用setState()
以重建输出文本。但是,FutureBuilder
现在被调用了 2 次,一次没有发生任何事情(banana2 仍然输出),然后立即再次被删除。
这里发生了什么?