Flutter: Erreur: 'await' ne peut être utilisé que dans les méthodes 'async' ou 'async *'. même si la méthode est asynchrone

Nov 20 2020

J'ai cette méthode:

Future<AppUser> _getUser(String documentId) async {
    var document = await firestore.collection('customers').doc(documentId);
    document.get().then((DocumentSnapshot documentSnapshot) {
          print(documentSnapshot.data());
    });
    AppUser bruceUser = AppUser(userId: 'user006',);

    return bruceUser;   
}

Et en dessous, j'ai une variable qui utilise cette méthode:

AppUser _user = await _getUser(document.id);

Cependant, cela renvoie l'erreur suivante:

Error: 'await' can only be used in 'async' or 'async*' methods.

Qu'est-ce que je fais de mal ici? Je ne veux pas changer _user en Future, car cela compliquera davantage le code, alors pourquoi l'attente ne fonctionne-t-elle pas?

Réponses

1 JustCode Nov 20 2020 at 00:57

_getUser()est une fonction asnyc mais pas la fonction appelante. L'erreur que vous obtenez indique que, a awaitété utilisée dans une fonction non asynchrone. Si vous rencontrez des difficultés pour convertir la fonction d'appel en asynchrone, essayez d'utiliser thencomme suit.

snapshot.data.docs.map((DocumentSnapshot document) {
    _getUser(document.id).then((user) {
          //code here
    });
}

En résumé, il existe deux solutions pour cela

  1. Convertissez la fonction appelant en async.
  2. Utilisation _getUser().then((user){});