我正在Flutter和Firebase中构建随机的1:1聊天应用程序。
我使用transaction
来添加用户聊天,因为必须避免将超过1位用户的比赛条件添加到聊天中。聊天必须为1:1。
如果只有一个用户在聊天中,那么我将在Firestore文档中使用布尔userInChat
进行监视,因此可以将其他用户添加到聊天中。
如果交易成功,我会显示聊天屏幕。如果不是,则显示错误。我设置userAdded
为布尔值。
我现在的解决方案是从事务超时抛出跟踪错误。因为根据我的理论,如果没有错误,那么必须成功完成交易。
但这只能在iOS上运行,而不能在Android上运行。 仅在iOS上,它会显示错误,如下所示:
PlatformException(9,事务所有重试均失败。,null)。
在Android上没有错误。
我正在使用插件cloud_firestore: ^0.9.5+2
我不知道为什么只能在iOS上运行。也许这是不正确的方法?我的代码有什么问题?正确的方法是什么?
感谢帮助!
Future<bool> addUser() async {
try {
await Firestore.instance.runTransaction((transaction) async {
DocumentSnapshot chatRoomDocSnapshot =
await transaction.get(chatRoomDocRef);
bool userInChat = await chatRoomDocSnapshot[‘userInChat'];
if (userInChat == false) {
await transaction.update(chatRoomDocSnapshot.reference, {
‘userInChat': true,
});
}
});
await chatUserRef.setData({
‘User’: user,
});
userAdded = true;
} catch (e) {
userAdded = false;
}
return userAdded;
}
更新:也许cloud_firestore
插件有问题?因为只有在Android上才会出现此错误。