У меня есть следующая функция для просмотра документов и их полей, которые есть в моей коллекции Firestore, и отображения их в виде карты в консоли:

documentsLoopFromFirestore() {
    FirebaseFirestore.instance
      .collection('myCollection')
      .get()
      .then((idkWhatGoesHereButICantRemoveIt) {
        idkWhatGoesHereButICantRemoveIt.docs.forEach((result) {
      print(result.data());
    });
  });
}

Когда я вызываю documentsLoopFromFirestore() с помощью кнопки:

ElevatedButton(
 onPressed: () {
   print(documentsLoopFromFirestore());
 }, 

В консоли получаю следующий результат:

I/flutter (29803): null
I/flutter (29803): {lastName: smith, name: peter}
I/flutter (29803): {lastName: doe, name: john}

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

Если я добавлю к функции async и await:

documentsLoopFromFirestore() async {
    await FirebaseFirestore.instance
      .collection('myCollection')
      .get()
      .then((idkWhatGoesHereButICantRemoveIt) {
        idkWhatGoesHereButICantRemoveIt.docs.forEach((result) {
      print(result.data());
    });
  });
}

Тогда я получаю:

I/flutter (29803): Instance of 'Future<dynamic>'
I/flutter (29803): {lastName: smith, name: peter}
I/flutter (29803): {lastName: doe, name: john}

Похоже, что он выбрасывает null при выполнении первого цикла. Кто-нибудь знает, как я могу избавиться от этого null?

0
objectiveactuator8 9 Июн 2021 в 01:03

2 ответа

Лучший ответ

Измените этот отпечаток (документы LoopFromFirestore ()); в документыLoopFromFirestore (); в повышенной кнопке

1
Prabhanshu Tiwari 8 Июн 2021 в 22:07

Причина, по которой вы видите null с первым кодом и Instance od Future<dynamic>, заключается в том, что вы сначала распечатываете свою функцию и результат.

В первом случае функция ничего не возвращает, поэтому вы видите null, а во втором функция является Furture, и вы просто печатаете, что это будущее.

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

0
Tarik Huber 8 Июн 2021 в 22:22