flutter - 从firestore获取最后一条消息
问题描述
我有一个如下所示的 Firestore 集合。我需要获取最后存储的message
.
Firestore-root
|
--- chat_rooms(collection)
|
--- chats(collection, the id for that collection is sender_reciever)
|
--- time_send: (millisecondsSinceEpoch)
|
--- sender:(string)
|
--- message:(string)
这是我db
获取最后一个消息的方法
getLastMessage(String chatRoomId) {
return Firestore.instance.
collection('chat_rooms').document(chatRoomId)
.collection('chat').orderBy('time_send',descending: false)
.limit(1);
}
我在这里称呼它。Chats
是一个返回sender
and的小部件last_message
。基本上我想做的是,例如,在使用whatsapp时,最后一条消息会弹出主页。我正在尝试做完全相同的事情。这样,我也可以得到username
。下面的方法不返回实际的用户数据。由于该集合chat_rooms_id
的 id 是username
和sender
的组合reciever
。我只是删除了reciever
当前用户。还有,sender
剩下的。
return Chats(
username: snapshot.data.documents[index]
.data["chat_room_id"] // return chat_room id
.toString()
.replaceAll("_", "")
.replaceAll(Constants.signedUserName, ""),
chatRoomId:
snapshot.data.documents[index].data["chat_room_id"],
last_message: _db
.getLastMessage(snapshot
.data.documents[index].data["chat_room_id"]
.toString())
.data[0]['message']
.toString(),
);
解决方案
你需要
return Firestore.instance.
collection('chat_rooms').document(chatRoomId)
.collection('chat').orderBy('time_send',descending: false)
.limit(1).get();
}
...虽然我会注意到这会返回一个你必须处理的承诺。您为最后一个文档定义了一个 QUERY,但您没有获取查询结果
推荐阅读
- c# - 按钮在设置为非活动和重新激活后无响应
- c - 带有 .c 和 .cpp 文件的 R 包,带有 Rcpp
- docusignapi - Docusign - 设置收件人语言 - 收件人收到的电子邮件始终为英文
- javascript - 无法调用其类型缺少调用签名的表达式。类型没有兼容的调用签名 2349
- html - 为什么后一个块元素的盒子从前一个块元素的内容开始,而不是从前一个元素的边框开始?
- javascript - 使用 ES6 在嵌套循环中返回父匹配
- android - 使用架构组件导航的 android 的 XML 材质转换
- emacs - 我可以在没有更多字母的情况下在 emacs 中选择它吗?
- c++ - 如何/何时在 DirectX 中释放资源和资源视图
- c# - 在每个循环中连接字符串