Условное заявление с данными из Firestore - PullRequest
0 голосов
/ 12 октября 2019

Я настроил cloud-firestore из базы огня. Здесь я хочу сохранить, если какой-то Магазин является любимым у пользователя. Поэтому я назначил каждому магазину избранный документ с полем -

"color:" "grey" или "color:" "red".

Чтобы изменить значение в firestore, я получаю к нему доступ с помощью этого оператора if:

if (Firestore.instance.collection("favorites")
    .document(user1')
    .collection('shops')
    .document("$index").toString() == "grey") {...}

Это не имеет никакого эффекта. Программа сразу переходит к оператору else. В Firestore document 0 выглядит так:

цвет: "серый".

В этом случае 0 обозначает первый магазин. Я применил к нему число 0, чтобы получить доступ к магазинам по индексу.

Я думаю, что-то не так с моим оператором if, функция else, которая изменяет значение в firestore, выглядит точно так же, за исключением toString() == 'grey'.

else {Firestore.instance.runTransaction((transaction) async {
     await transaction.set(Firestore.instance.collection("favorites")
         .document('dd')
         .collection('shops')
         .document("$index"), {'color': 'grey',});
         });
 }

У меня такая же проблема с условным оператором, с помощью которого я выбираю цвет со значениями в поле. При этом я хочу получить доступ к пожарному магазину и посмотреть, какое значение применяется к каждому магазину:

Firestore.instance.collection('favorites')
    .document('dd')
    .collection("shops")
    .document("1").toString() == "grey" ? Colors.grey : Colors.red ,

Та же самая проблема здесь, он сразу же переходит на красный цвет, и каждый магазин помечается как любимый.

1 Ответ

2 голосов
/ 12 октября 2019

Запросы к базе данных Firestore являются асинхронными. То есть, если вы сделаете что-то вроде

Firestore.instance.collection('favorites')
.document('user1')
.collection('shops')
.document("$index").toString() == "grey"

, оно всегда будет ложным.

Вы должны сделать, как описано в doc , чтобы дождаться возвращения обещанияметодом get() разрешает:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...