У меня есть несколько вопросов относительно использования фьючерсов в дротике. Скажем, я работаю с пожарным хранилищем, и у меня есть такая функция для обновления информации о пользователях:
void updateOldUser(User oldUser,String newInfo){
DocumentReference userToUpdateRef = userRef.document(oldUser.id);
Firestore.instance.runTransaction((Transaction transaction) async {
DocumentSnapshot userToUpdateSnapshot = await transaction.get(userToUpdateRef);
if(userToUpdateSnapshot.exists){
await transaction.update(
userToUpdateSnapshot.reference, userToUpdateSnapshot.data[newInfo] + 1
).catchError((e)=> print(e));
}
});
}
Мой вопрос: нужно ли возвращать будущее, поскольку runTransaction is Future. Кажется, он отлично работает и без него, но мне кажется, что он должен вернуть "Future void", чтобы иметь возможность ожидать updateOldUser, когда я его использую. Но когда я превращаю его в «Future void», а затем заканчиваю тело функции с помощью return; У меня есть сообщение об ошибке: «Ожидается значение после возврата». Но чего я действительно не понимаю, так это того, что с другим похожим кодом:
Future<void> updateUserPhoto(User user,File userPhoto) async {
String photoUrl = await uploadImage(user.id,userPhoto);
DocumentReference userToUpdateRef = userRef.document(user.id);
Firestore.instance.runTransaction((Transaction transaction) async {
DocumentSnapshot userToUpdateSnapshot = await transaction.get(userToUpdateRef);
if(userToUpdateSnapshot.exists){
await transaction.update(
userToUpdateSnapshot.reference, {
'photoUrl' : photoUrl
}
).catchError((e)=> print(e));
}
});
return;
}
Я не получаю эту ошибку, и она тоже работает нормально. Почему ? Заранее спасибо.