FlutterFire — Если запрос Firestore ‘result.exist’ возвращает значение true при наличии результата, то какое возвращаемое значение, если результатов нет?

#firebase #flutter #google-cloud-firestore

#firebase #flutter #google-cloud-firestore

Вопрос:

В моей базе данных есть документ, в котором есть поле bizCode: ‘123456’. Выполнение приведенного ниже возвращает значение TRUE и выводит ‘код существует’.

Однако, когда я изменяю isEqualTo: ‘abcdef’ (который не существует в моей базе данных), ничего не возвращается и не распечатывается.

Как я должен закодировать это, чтобы, когда запрос не дает результатов, он печатал возвращает false или null или пробел и печатал «такого кода нет»?

                   await FirebaseFirestore.instance
                      .collection("users")
                      .where('bizCode', isEqualTo: '123456')
                      .get()
                      .then((querySnapshot) {
                    querySnapshot.docs.forEach((result) {
                      print(result.exists);
                      if (result.exists) {
                        print('code exists');
                      } else {
                        print('no such code');
                      }
                    });
  

Ответ №1:

Я думаю, вы хотите проверить querySnapshot.hasError , и querySnapshot.size > 0 .

Комментарии:

1. Спасибо! Я думаю, что на данный момент querySnapshot.size достаточен для использования.

Ответ №2:

Я мог бы дать вам идею. Вы можете проверить длину результата.
Сделайте что-то вроде этого.

 await FirebaseFirestore.instance
  .collection("users")
  .where('bizCode', isEqualTo: '123456')
  .get()
  .then((querySnapshot) {
    
    if(querySnapshot.size > 0){
      var results = querySnapshot.docs;
      results.forEach((result) {
        if (result.exists) {
          print('code exists');
        } else {
          print('no such code');
        }
      }else{
        print("No Results Found!");
      }
});
  

Надеюсь, это подходит для вашего случая.