Я получаю исключение в облачных транзакциях - PullRequest
1 голос
/ 08 ноября 2019

Я получаю исключение облачного пожарного хранилища, в котором говорится "Ошибка при выполнении транзакции. Каждый документ, прочитанный в транзакции, также должен быть записан., 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. Пожалуйста, помогите

1 Ответ

0 голосов
/ 08 ноября 2019

Я считаю, что это должно быть string электронное письмо («электронная почта»), указывающее на путь ниже (отредактированный), а не сам объект электронной почты.

DocumentReference favoritesReference =
Firestore.instance.collection('users').document('email')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...