Я пытаюсь загрузить некоторые данные из Firestore, когда пользователь входит в систему, и мне нужно дождаться загрузки данных, прежде чем продолжить. Однако мои попытки дождаться результатов не работают.
Future<bool> userListener() async {
_auth.onAuthStateChanged.listen((firebaseUser) {
bool isDone = false;
if (firebaseUser != null) {
isDone = await loadUserData(firebaseUser); // This line is killing me!!
return isDone;
} else {
return false;
}
}, onError: (error) {
print('error in UserListener: $error');
});
}
Future<bool> loadUserData(FirebaseUser user) async {
Firestore database = Firestore();
DocumentReference data = database.collection('userData').document(user.uid);
try {
DocumentSnapshot myQuery = await data.get();
theNumber = myQuery.data['theNumber'];
return true;
} on PlatformException catch (e) {
print(e);
return false;
}
}
Я получаю прекрасную ошибку из строки:
isDone = await loadUserData(firebaseUser);
, что " выражение ожидания может быть только используется в asyn c function".
Я не уверен, как эти функции могут получить асин c. Кроме того, если я не добавлю await
, то мне скажут, что Future не может быть назначен на bool, что имеет смысл, и предполагают, что моя функция на самом деле asyn c.
Почему я не могу дождаться результатов моей функции loadUserData
?