Я получаю исключение облачного пожарного хранилища, в котором говорится "Ошибка при выполнении транзакции. Каждый документ, прочитанный в транзакции, также должен быть записан., Null". Эта проблема возникает только тогда, когда я пытаюсь запустить транзакцию, создав документ пользователя по его электронной почте, все работает нормально, когда он на UID.
Future<bool> updateFavorites(String email, String recipeId) {
DocumentReference favoritesReference =
Firestore.instance.collection('users').document(email);
return Firestore.instance.runTransaction((Transaction tx) async {
DocumentSnapshot postSnapshot = await tx.get(favoritesReference);
if (postSnapshot.exists) {
if (!postSnapshot.data['favorites'].contains(recipeId)) {
await tx.update(favoritesReference, <String, dynamic>{
'favorites': FieldValue.arrayUnion([recipeId])
});
} else {
await tx.update(favoritesReference, <String, dynamic>{
'favorites': FieldValue.arrayRemove([recipeId])
});
}
} else {
await tx.set(favoritesReference, {
'favorites': [recipeId]
});
}
}).then((result) {
return true;
}).catchError((error) {
print('Error: $error');
return false;
});
}
Это функция, где транзакция происходити эта функция вызывается здесь:
void handleFavoritesListChanged(String recipeID) {
updateFavorites(appState.user.email, recipeID) //the user hold the current firebase user
.then((result) {
if (result == true) {
setState(() {
if (!StateModel.favorites.contains(recipeID))
StateModel.favorites.add(recipeID);
else
StateModel.favorites.remove(recipeID); //StateModel is a class which has the empty list of favorites
});
}
});
}
приведенный выше код прекрасно работает, когда я использую user.uid вместо use.email. Пожалуйста, помогите