gpt4 book ai didi

firebase - flutter : how to get newly added record from firebase real time database?

转载 作者:行者123 更新时间:2023-12-03 02:52:32 25 4
gpt4 key购买 nike

我正在使用下面的代码从我的 firebase 聊天室中检索所有数据

void readDataFromFireBase() {

var databaseReference =
FirebaseDatabase.instance.reference().child("messages");

databaseReference
.child(chatroom.chatId)
.once()
.then((DataSnapshot snapshot) {
Map<dynamic, dynamic> values = snapshot.value;

values.forEach((key, value) {
setState(() {
chatMessageList.add(ChatMessage(
value["message"], value["fromUser"], value["timestamp"]));
chatMessageList.sort((a, b) {
var formatter = new DateFormat('MM/dd/yyyy, kk:mm');
var dateOne = formatter.parse(a.timestamp);
var selectedDate = formatter.parse(b.timestamp);
return dateOne.compareTo(selectedDate);
});


});
});
}

现在如何在新消息到达时通知我的聊天室

目前我正在使用下面的代码来监听子添加事件

listenDataFromFireBase() {
var db = FirebaseDatabase.instance.reference().child("messages");
db.child(chatroom.chatId).onChildAdded.listen((data) {
print("GET_NEW_DATA");
print(data.snapshot.value["message"] ?? '');
print(data.snapshot.value["fromUser"] ?? false);
print(data.snapshot.value["timestamp"] ?? '');
});
}

但我面临一个问题,listenDataFromFireBase() 从特定房间加载所有数据

我的要求是,每当聊天室中添加新消息时,我都想为我的消息布局设置动画

每当有新消息添加到我的聊天室时,如何通知我的屏幕。

如果需要更多信息,请告诉我。提前致谢。您的努力将不胜感激。

最佳答案

正如您所发现的,onChildAdded 会为任何现有数据立即触发,之后还会在添加任何数据时触发。如果您想区分这两种情况,您需要结合使用 onChild 监听器和 onValue 监听器。

onValue 监听器中,您所做的就是标记该事件是否已发生:

databaseReference.onValue.listen((event) {
setState(() {
isInitialDataLoaded = true
});
});

现在在 onChildAdded 监听器中进行所有数据处理,从快照中获取消息并将其添加到列表中。然后使用 isInitialDataLoaded 检测这是初始数据还是更新:

var db = FirebaseDatabase.instance.reference().child("messages");
db.child(chatroom.chatId).onChildAdded.listen((data) {
// TODO: get message from snapshot and add to list

if (isInitialDataLoaded) {
// TODO: alert the view about the new data
}
});

所以您将在同一个节点上有两个监听器。 Firebase SDK 实际上会检测到这种情况,并且只会从服务器读取一次数据,因此在这种情况下不会传输额外的数据。

关于firebase - flutter : how to get newly added record from firebase real time database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60654051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com