因此,我学习了如何在Firebase Firestore云中创建和更新文档,但是我在读取数据时遇到了麻烦。随附的是我用于查找“ photourl”字段值的代码:
String photoy;
Firestore.instance.collection('userdata').document('sepDGexTRuRkpx1WQYylDDmUI573')
.get().then((DocumentSnapshot ds){
photoy=ds.data['photourl'];
});
setState(() {
photourldisplay=photoy;
});
但是,在运行程序时,photourldisplay值似乎没有更改,并且在运行时保持为空。这意味着检索我的“ photourl”字段的代码有些歪斜。有人可以帮助我检索Firebase文档中的字段吗?
答案 0 :(得分:2)
photoy
不包含您期望的值,因为Firestore查询是异步的。 get()立即返回,并在查询完成后的一段时间后调用回调。无法保证查询会花费多长时间。如果您想将photoy
的值传递给其他值,则必须等到回调完成后才可以通过仅在该回调中使用它来实现。
Firestore.instance.collection('userdata').document('sepDGexTRuRkpx1WQYylDDmUI573')
.get().then((DocumentSnapshot ds){
photoy=ds.data['photourl'];
setState(() {
photourldisplay=photoy;
});
});
答案 1 :(得分:2)
您的代码很好,您只需要等待结果即可:
void yourVoid () async {
String photoy;
await Firestore.instance.collection('userdata').document('sepDGexTRuRkpx1WQYylDDmUI573')
.get().then((DocumentSnapshot ds){
photoy=ds.data['photourl'];
});
setState(() {
photourldisplay=photoy;
});
}
编辑: 正如@道格·史蒂文森(Doug Stevenson)所说,有两种适当的解决方案:
void yourVoid () async {
DocumentSnapshot ds = await Firestore.instance.collection('userdata').document('sepDGexTRuRkpx1WQYylDDmUI573')
.get();
String photoy = ds.data['photourl'];
setState(() {
photourldisplay=photoy;
});
}
和:
Firestore.instance.collection('userdata').document('sepDGexTRuRkpx1WQYylDDmUI573')
.get().then((DocumentSnapshot ds){
photoy=ds.data['photourl'];
setState(() {
photourldisplay=photoy;
});
});