我从 firebase 设置了一个
cloud-firestore
。在这里我想保存某个商店是否是用户最喜欢的。因此,我为每个商店分配了一个带有该字段的文档收藏夹-
“颜色:”“灰色”或“颜色:”“红色”。
要更改
firestore
中的值,我使用以下 if 语句访问它:
if (Firestore.instance.collection("favorites")
.document(user1')
.collection('shops')
.document("$index").toString() == "grey") {...}
这没有效果。程序立即跳转到else语句。 在
Firestore
中,document 0
看起来像这样:
颜色:“灰色”。
本例中0代表第一家商店。我对其应用了数字 0,这样我就可以通过索引访问商店。
我认为我的 if 语句一定有问题,改变
firestore
中的值的 else 函数看起来完全一样,除了 toString() == 'grey'
之外。
else {Firestore.instance.runTransaction((transaction) async {
await transaction.set(Firestore.instance.collection("favorites")
.document('dd')
.collection('shops')
.document("$index"), {'color': 'grey',});
});
}
我对条件语句也有同样的问题,我用该条件语句选择带有字段中的值的颜色。有了这个,我想访问 firestore 并查看哪个值应用于每个商店:
Firestore.instance.collection('favorites')
.document('dd')
.collection("shops")
.document("1").toString() == "grey" ? Colors.grey : Colors.red ,
同样的问题,它立即跳到红色,每个商店都被标记为最喜欢的。
对 Firestore 数据库的查询是异步的。所以如果你做类似的事情
Firestore.instance.collection('favorites')
.document('user1')
.collection('shops')
.document("$index").toString() == "grey"
它永远是假的。
您必须按照 doc 中的说明进行操作,等待
get()
方法返回的 Promise 解析:
Firestore.instance
.collection("favorites")
.document('user1')
.collection('shops')
.document("$index")
.get()
.then((DocumentSnapshot ds) {
// use ds as a snapshot
const docData = ds.data;
const color = docData["color"];
//Do whatever you want with color value
});
有关更多详细信息,请参阅https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/DocumentSnapshot-class.html