来自 Firestore 的数据的条件语句

问题描述 投票:0回答:1

我从 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 ,

同样的问题,它立即跳到红色,每个商店都被标记为最喜欢的。

flutter google-cloud-platform google-cloud-firestore conditional-statements
1个回答
2
投票

对 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

© www.soinside.com 2019 - 2024. All rights reserved.