Как использовать массив, содержащийся в двух разных полях массива в firebase для flutter

# #javascript #firebase #flutter #dart #google-cloud-firestore

Вопрос:

У меня есть документ с двумя полями, searchkeys1 и searchkeys2, я хочу, чтобы мой запрос firebase проверял, присутствует ли предоставленное мной значение в searchkey1, и возвращал, если не выполнял поиск searchkey2, моей первой попыткой было создать запрос со значением и сначала проверить searchkey1, и если возвращенные документы пусты, попробуйте searchkey2, моя проблема в том, что я продолжаю получать ошибку, когда пытаюсь проверить, были ли возвращены какие-либо документы

 "the getter 'documents' isn't defined for the type 'Stream<QuerySnapshot>'  "
 

вот мой код

 startSearch(input) {
        var docSnapshot = FirebaseFirestore.instance
            .collection('items')
            .where('searchkeys1', arrayContains: input.toString()).snapshots();

        if (docSnapshot.documents.length == 0) {

            var docSnapshot2 = FirebaseFirestore.instance
                .collection('items')
                .where('searchkeys2', arrayContains: input.toString()).snapshots();

            return docSnapshot2;




        } else if (docSnapshot.documents.length != 0) {


            return docSnapshot;


        }
 

Ответ №1:

Вам нужно создать свою функцию async и использовать get вместо smnapshots :

 startSearch(input) async {
        var docSnapshot = await FirebaseFirestore.instance
            .collection('items')
            .where('searchkeys1', arrayContains: input.toString()).get();

        if (docSnapshot.documents.length == 0) {

            var docSnapshot2 = await FirebaseFirestore.instance
                .collection('items')
                .where('searchkeys2', arrayContains: input.toString()).get();

            return docSnapshot2;




        } else if (docSnapshot.documents.length != 0) {


            return docSnapshot;


        }
 

С get вами получите данные один раз, как вы этого хотите. Но вместе с snapshots вами получите слушателя для чанов в реальном времени.