- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用下面的代码从我的 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/
我有这段代码(运行 jQuery 1.4.2) var elementToAdd = $('').html('header'); var p = $('').html('hello world');
我正在使用 NSIS 构建程序安装程序。可执行文件名为 XYZ.exe,我想将其安装在“$PROGRAM_FILES/XYZ 1.0/”中。我还在菜单开始中创建快捷方式:“$MENU_START/XY
我收到了来自 Android Market 的电子邮件,其中宣布了新的内容分级政策并包含指向 this page 的链接.所以我尽职尽责地准备了一个应用程序更新并将其上传到草稿状态,但是到底有什么方法
就良好的 REST API 设计而言,返回 id 是否是个好主意?新创建的资源?假设我有一个 API: api/resource POST 我见过一些大师有这样的 API 来返回空 json 并将 U
我有两个 Remote - origin 指向我的 fork 和 上游 指向公司 repo 。 $git remote -v origin https://github.com/me/
为什么我创建的模型实例在之后直接从 celery 任务查询时没有找到?例如: # app.views model = Model.objects.create() # I create my l
我克隆了一个空的 git 存储库。我已经把我的整个 xcode 应用程序放在了。现在我想将这些项目推送到服务器,然后它显示文件夹未跟踪。 请查看随附的屏幕截图。该文件夹包含多个文件和子文件夹。 最佳答
我的问题很简单,就在标题中! 这是我的代码: userCreate: function(button) { var grid = button.up('panel'), sto
我的网页中有一个 html 表格。它充满了我的数据库中的信息。 它有这样的结构: Id- Title –Author 1 – Africa – John Smith 2- Europe- Martin
我在 code 上工作.它工作成功。但我面临的问题是: 新列在列表中不可见(我尝试使用 With Setting Required = "TRUE")。 我尝试比较可见列和不可见列的字段值。我发现的区
我使用 SKAction waitForDuration 每 5 秒生成一个 sprite self.addChild(enemy) 如何访问最近生成的 Sprite 的位置? 最佳答案 每次生成 S
我正在尝试学习如何使用 KnockOut...以前从未使用过,并且我已经在已经使用它的网站上陷入困境。这里一切正常: function MasterViewModel() {
我正在使用原始 SQL 插入一行,并且需要获取新插入行的主键。我不能假设任何非 PK 插入数据都是唯一的,也不能假设该行是最后插入的行。 如果无法使用原始 SQL,那么使用“常规”插入怎么样?我在想我
我正在尝试在/res 目录中创建一个新文件夹 我添加了一个新目录 该文件夹不会出现在/res 文件夹中,即使它存在于 finder 中 案例和要点我尝试再次添加该文件夹并收到一条消息,告诉我它存在。
我想创建一个数据库并在该数据库中创建一个表。。我创建了一个新数据库,然后创建了一个新表“USERS”。但会出现错误“关系已存在”。是的,我已经有一个表“USERS”,但它存在于另一个数据库中。但我希望
我想创建一个数据库并在该数据库中创建一个表。。我创建了一个新的数据库,然后创建了一个新的表“users”。但出现错误“关系已存在”。是的,我已经有一个表“users”,但它存在于另一个数据库中。但是我
我想创建一个如下所示的 Coq 策略。我断言一个名为 H 的命题,我证明该命题,然后我在该命题内使用 simpl。该策略看起来像这样: Tactic Notation "foo" := asser
我想知道这是怎么回事。我有两个功能,当一个接一个地调用时,它们都运行良好: function createTable() { var slidesPage = SlidesApp.openById
如何获取新保存文件的文件名? 通常,我可以使用以下方法获取文件名: Office.context.document.url 然而,当用户打开一个新的工作簿时,它并没有真正的文件名,而且奇怪的是,即使他
我有一个 Webix,它可以添加应验证的附加文本字段以及预定义字段。 类似下一个:http://webix.com/snippet/73c90f29 function addFormInput(){
我是一名优秀的程序员,十分优秀!