Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase I';我在云firestore事务中遇到异常_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase I';我在云firestore事务中遇到异常

Firebase I';我在云firestore事务中遇到异常,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我得到一个CloudFireStore异常,它说“执行事务时出错,事务中读取的每个文档也必须写入,null”。只有当我试图通过用户的电子邮件创建一个文档来运行事务时,这个问题才会出现,当它在UID上时,一切正常 Future<bool> updateFavorites(String email, String recipeId) { DocumentReference favoritesReference = Firestore.instance.collection('user

我得到一个CloudFireStore异常,它说“执行事务时出错,事务中读取的每个文档也必须写入,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;
  });
}
当我使用user.uid而不是use.email时,上面的代码非常有效。
请帮助

我认为应该是
字符串
电子邮件(“电子邮件”)指向下面的路径(已编辑),而不是电子邮件对象本身

DocumentReference favoritesReference =
Firestore.instance.collection('users').document('email')

我认为应该是
字符串
email(“email”)指向下面的路径(已编辑),而不是email对象本身

DocumentReference favoritesReference =
Firestore.instance.collection('users').document('email')

但是这个函数与另一个名为placeOrder()的函数一起工作,它有相同的代码,但不检查收藏夹是否包含配方Id。因此,我想确保在firestore数据库中,您有一个名为“users”的集合和一个名为“email”的集合后面的文档。这样设置会很奇怪,但上面的代码就是这样读的。您可能拥有的是一个users集合,每个用户都有一个文档,其中每个用户都有一个指向特定键:值对的映射。所以对于上面的例子,它应该是:Firestore.instance.collection('users').document('jonny123')。。。要访问包含用户Jonny的电子邮件、用户名等的映射,我发现主要问题不在于电子邮件,而在于方法contains(),如果(!postsnashot.data['favorites'].contains(recipeId)),则还有一个函数类似于我在问题中显示的代码,我使用的另一个函数可以处理电子邮件,但没有这一行(如果(!postsnashot.data['favorites'].contains(recipeId)),那么这就是问题所在,方法contains是在null上调用的,但它可以与另一个名为placeOrder()的函数一起工作它具有相同的代码,但不检查收藏夹是否包含配方Id。因此,我想确保在firestore db中,您有一个名为“用户”的集合和一个名为“电子邮件”的集合后面的文档。这样设置会很奇怪,但上面的代码就是这样读的。您可能拥有的是一个users集合,每个用户都有一个文档,其中每个用户都有一个指向特定键:值对的映射。所以对于上面的例子,它应该是:Firestore.instance.collection('users').document('jonny123')。。。要访问包含用户Jonny的电子邮件、用户名等的映射,我发现主要问题不在于电子邮件,而在于方法contains(),如果(!postsnashot.data['favorites'].contains(recipeId)),则还有一个函数类似于我在问题中显示的代码,我使用的另一个函数可以处理电子邮件,但没有这一行(如果(!postsnashot.data['favorites'].contains(recipeId)),那么这就是问题所在,方法contains是在null上调用的