Firebase I';我在云firestore事务中遇到异常
我得到一个CloudFireStore异常,它说“执行事务时出错,事务中读取的每个文档也必须写入,null”。只有当我试图通过用户的电子邮件创建一个文档来运行事务时,这个问题才会出现,当它在UID上时,一切正常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
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上调用的