我正在实现聊天应用程序,必须使用事务来同步用户的消息。但是,有致命错误会突然终止应用程序。我该如何处理?
我为此搜索了许多材料,但没有解决方案。 Github issue与此相关,我已经为此写过issue。
Future<void> sendMessage(String content,String receiver,String chatRoomID) async {
DocumentReference doc = Firestore.instance
.collection(firestoreMessageCollection)
.document(chatRoomID)
.collection(chatRoomID)
.document(DateTime.now().millisecondsSinceEpoch.toString());
await Firestore.instance.runTransaction((tx) async{
await tx.set(doc,{
firestoreChatFromField: sl.get<CurrentUser>().uid,
firestoreChatToField: receiver,
firestoreChatTimestampField: DateTime.now().millisecondsSinceEpoch.toString(),
firestoreChatContentField: content
});
});
}
我期望正确的结果是哪项交易正常进行,但发生以下错误并终止了应用程序。
E / AndroidRuntime(1719):原因:java.lang.IllegalArgumentException:提供的文档引用来自其他Firestore实例。
即使我使用的是同一Firestore实例,它也会连续发生。有谁解决了这个可怕的问题?
答案 0 :(得分:0)
它与Firestore设置有关。初始化Firestore设置时,请使用Firestore.instance
。如果您使用其他实例,则会发生我的错误
答案 1 :(得分:0)
我也遇到了同样的问题。当我更新文档参考代码时,此问题已修复。您可以尝试更改文档参考吗?
来自:
DocumentReference doc = Firestore.instance
.collection(firestoreMessageCollection)
.document(chatRoomID)
.collection(chatRoomID)
.document(DateTime.now().millisecondsSinceEpoch.toString());
收件人:
DocumentReference doc = Firestore.instance.document('$firestoreMessageCollection/$chatRoomID/$chatRoomID/${DateTime.now().millisecondsSinceEpoch.toString()}');
我还更新了依赖项版本。就我而言,这些是:
firebase_core: ^0.4.0+6
firebase_auth: 0.11.1+7
cloud_firestore: 0.12.5+2
firebase_storage: ^3.0.2
firebase_messaging: ^5.0.4
firebase_crashlytics: ^0.0.4+8