在 flutter 中保存两个用户聊天时出错
error in saving two users chat in flutter
我正在用 firebase 制作聊天应用程序。我能够通过这个功能在 firebase 中保存用户聊天:
await FirebaseFirestore.instance
.collection("Chats")
.doc(uid! + FirebaseAuth.instance.currentUser!.uid)
.collection("messages")
.add({
FirebaseAuth.instance.currentUser!.uid:
chatController.text,
}).then((value) => () {
b = uid;
});
但是当我保存一个用户聊天时。我在想什么时候我会得到第二个用户的聊天。它将 return 来自我保存两个用户聊天的文档的聊天。但不幸的是,当我保存用户聊天时,它会保存一个名为第一个用户 ID 的新文档,然后是第二个用户 ID,在第一个用户聊天中,它会保存名为第二个用户 ID 和第一个用户 ID 的文档。我知道发生这种情况的原因是什么,但我该如何解决,我的意思是如何将两个用户的聊天记录保存在一个文档中
更新:根据Frank的回答我试过的功能:
var docId = uid
.toString()
.compareTo(FirebaseAuth.instance.currentUser!.uid) > 0;
用于打印docId的函数:
IconButton(
icon: Icon(Icons.send),
iconSize: 20.0,
onPressed: () async { print(docId);}
)
您需要为文档确定一个 ID。
一个简单的方法是始终按字母顺序对两个 UID 进行排序,如下所示:
const docId = uid!.compareTo(FirebaseAuth.instance.currentUser!.uid) > 0
? uid! + FirebaseAuth.instance.currentUser!.uid
: FirebaseAuth.instance.currentUser!.uid + uid!
await FirebaseFirestore.instance
.collection("Chats")
.doc(docId)
...
有关这方面的更多信息,请在此处查看我的回答中的示例:
我正在用 firebase 制作聊天应用程序。我能够通过这个功能在 firebase 中保存用户聊天:
await FirebaseFirestore.instance
.collection("Chats")
.doc(uid! + FirebaseAuth.instance.currentUser!.uid)
.collection("messages")
.add({
FirebaseAuth.instance.currentUser!.uid:
chatController.text,
}).then((value) => () {
b = uid;
});
但是当我保存一个用户聊天时。我在想什么时候我会得到第二个用户的聊天。它将 return 来自我保存两个用户聊天的文档的聊天。但不幸的是,当我保存用户聊天时,它会保存一个名为第一个用户 ID 的新文档,然后是第二个用户 ID,在第一个用户聊天中,它会保存名为第二个用户 ID 和第一个用户 ID 的文档。我知道发生这种情况的原因是什么,但我该如何解决,我的意思是如何将两个用户的聊天记录保存在一个文档中
更新:根据Frank的回答我试过的功能:
var docId = uid
.toString()
.compareTo(FirebaseAuth.instance.currentUser!.uid) > 0;
用于打印docId的函数:
IconButton(
icon: Icon(Icons.send),
iconSize: 20.0,
onPressed: () async { print(docId);}
)
您需要为文档确定一个 ID。
一个简单的方法是始终按字母顺序对两个 UID 进行排序,如下所示:
const docId = uid!.compareTo(FirebaseAuth.instance.currentUser!.uid) > 0
? uid! + FirebaseAuth.instance.currentUser!.uid
: FirebaseAuth.instance.currentUser!.uid + uid!
await FirebaseFirestore.instance
.collection("Chats")
.doc(docId)
...
有关这方面的更多信息,请在此处查看我的回答中的示例: