Tengo la siguiente función para bucle a través de los documentos y sus campos que tengo en mi colección de Firestore y mostrarlos como un mapa en la consola:

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

Cuando llamo documentsLoopFromFirestore() en un botón con:

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

Obtengo el siguiente resultado en la consola:

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

Imprime con éxito los valores de mis documentos en esa recolección de Firestore, pero justo antes de que lo haga, lanza que null que no está permitiendo agregar este mapa a otra colección que es mi objetivo.

Si agrego async y await a la función:

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

Entonces obtengo:

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

Parece que lanza el null al hacer el primer bucle. ¿Alguien sabe cómo puedo deshacerme de este null?

0
objectiveactuator8 9 jun. 2021 a las 01:03

2 respuestas

La mejor respuesta

Cambiar esta impresión (documentos buclefromfirestore ()); a DoctosLoopfromFirestore (); en el botón elevado

1
Prabhanshu Tiwari 8 jun. 2021 a las 22:07

La razón por la que vea un null con el primer código y el Instance od Future<dynamic> es que primero imprime su función y el resultado.

En el primer caso, la función no debe volver nada, por lo que verá null y en el segundo la función es un furure para usted simplemente imprimir que es un futuro.

Para evitar que eliminen la primera impresión o devuelva los valores en el formato que desea en la función.

0
Tarik Huber 8 jun. 2021 a las 22:22