【发布时间】:2022-01-11 05:44:00
【问题描述】:
即使我使用 .push() 方法,Firebase 实时数据库也会在某个位置覆盖我的数据。我对写入 Firebase 实时数据库的一点具体知识是,写入 Firebase 实时数据库可以通过几种方式完成。其中最突出的两个是
- set() 和 2. push() 方法。
长话短说,push() 用于为要写入的数据创建一个新密钥,并将数据添加到节点。
很好,firebase 在我以前的项目中一直与我合作,但在这方面,我不知道发生了什么。我尝试了不同的 push 和 set 组合来实现我的目标,但到目前为止没有任何进展。
在下面的代码中,我想要实现的是两件事,只写一次位置chatUID,消息和时间,但在同一节点“firebaseGeneratedId1”下分别写入'-MqBBXPzUup7czdG2xCI' ->
下面是一个更好的结构。
更新
这是我的代码 作者参考
_listeningMsgRef = _msgDatabase
.reference()
.child('users')
.child(userId)
.child('chats')
.child(chatUIDConcat);
当用户点击 sendMessage 时,这里是调用的函数
void sendMessage() {
_messageController.clear();
var timeSent = DateTime.now().toString();
//Send
Map msgMap = {
'message': msg,
'sender': userId,
'time': timeSent,
'chatUID': chatUIDConcat
};
//String _key = _listeningMsgRef.push().key;
_listeningMsgRef.child(chatUIDConcat).set().whenComplete(() {
SnackBar snackBar = const SnackBar(content: Text('Message sent'));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
DatabaseReference push = _listeningMsgRef.child(chatUIDConcat).push().set(msgMap);
});
}
关于sendMessage函数的思路,就是写
chatUID:"L8pacdUOOohuTlifrNYC3JALQgh2+q5D38xPXVBTwmwb5Hq..."
message: "I'm coming"
newMessage: "true"
sender: "L8pacdUOOohuTlifrNYC3JALQgh2"
完成后,在用户节点下推送新节点。
【问题讨论】:
-
请编辑您的问题以显示未按您期望/希望的那样工作的代码。这样更有可能有人可以帮助解释代码的作用,以及如何让它做你想做的事情。
-
对于迟到的回复,我深表歉意。 Stackoverflow 让我在尝试格式化我的代码时感到很痛苦。
标签: firebase flutter firebase-realtime-database