我尝试在flutter中从firebase读取警报对话框中的数据,当按下按钮时,然后更新它。
我试过使用StreamBuilder,但什么也没发生
new FlatButton(
child: const Text('+ Add'),
onPressed: () {
StreamBuilder(
stream: Firestore.instance.collection('users').document(user.uid).collection('Filtre').document('ChooseSelf').snapshots(),
builder: (context, snapshot) {
var TypeSelfFilters = snapshot.data;
List<String> ListOfTypeSelf = List.from(TypeSelfFilters["Personer"]);
ListOfTypeSelf.add("value of TextFormField");
Firestore.instance.collection('users').document(user.uid).collection('Filtre').document('ChooseSelf').updateData({'Personer': ListOfTypeSelf});
}
);
Navigator.pop(context);
}
);
我没有得到任何错误,但是StreamBuilder中的代码由于某种原因没有被执行。
谢谢您
最佳答案
Hm.…在我看来,当用户点击FlatButton
时,您希望获得数据。
让我们看看会发生什么:
点击扁平按钮
实例化aStreamBuilder
开始从FireStore获取数据
做一些火商店魔术,更新日期
然后关闭对话框
问题:在实例化navigator.pop()
后立即调用navigator.pop()
。streambuilder必须等待一段时间才能获取数据。如果弹出一条路由,并破坏警报对话框,则不会调用生成器回调。所以事情发生的实际顺序是:StreamBuilder
建议:为什么要将计算包装在StreamBuilder中?你可以这样做:
onPressed: () {
Firestore.instance.collection('users')/*...*/.snapshots().then((snapshot) async {
// then branch is executed once snapshot is retrieved from firestore
var TypeSelfFilters = snapshot.data;
// do some more computation and magic
await Firestore.instance.collection/*...*/.updateData();
// wait for updateData to finish
Navigator.pop(context); // this context is not the context inside the StreamBuilder
});
}
关于firebase - 如何从AlertDialog小部件中的firebase读取数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56413702/