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 then
comme suit.
snapshot.data.docs.map((DocumentSnapshot document) {
_getUser(document.id).then((user) {
//code here
});
}
En résumé, il existe deux solutions pour cela
- Convertissez la fonction appelant en
async
. - Utilisation
_getUser().then((user){});