Flutter: Błąd: „await” można używać tylko w metodach „async” lub „async *”. nawet myślałem, że metoda jest asynchroniczna
Nov 20 2020
Mam taką metodę:
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;
}
A poniżej mam zmienną używającą tej metody:
AppUser _user = await _getUser(document.id);
Jednak zwraca to następujący błąd:
Error: 'await' can only be used in 'async' or 'async*' methods.
Co ja tu robię źle? Nie chcę zmieniać _user na Future, ponieważ to jeszcze bardziej skomplikuje kod, więc dlaczego czekanie nie działa?
Odpowiedzi
1 JustCode Nov 20 2020 at 00:57
_getUser()
jest funkcją asnyc, ale nie funkcją wywołującą. Otrzymany błąd informuje, że await
został użyty w funkcji innej niż asynchroniczna. Jeśli masz trudności z konwersją funkcji wywołującej na asynchroniczną, spróbuj wykonać then
następujące czynności.
snapshot.data.docs.map((DocumentSnapshot document) {
_getUser(document.id).then((user) {
//code here
});
}
Podsumowując, istnieją dwa rozwiązania tego problemu
- Przekonwertuj funkcję dzwoniącego na
async
. - Posługiwać się
_getUser().then((user){});