firebase - 如何在 Flutter 中检查来自 FireStore 的新数据
问题描述
基本上我有一个聊天应用程序。每当出现新数据时,我都想要检查滚动位置并运行一些代码。问题是如何检查何时从 Firestore 获取新数据。
这是我的基本聊天应用程序代码。
class Mess {...}//factory
class Body extends StatefulWidget {...}
class _BodyState extends State<Body> {
List<Mess> _messages = [];
StreamSubscription _messSubs;
ScrollController _scrollController;
double _scrollPosition;
bool yeniMesajVar = false;
_scrollListener() {
setState(() {
_scrollPosition = _scrollController.position.pixels;
});
}
@override
void initState() {
_getMessages();
super.initState();
_scrollController = ScrollController();
_scrollController.addListener(_scrollListener);
}
void _getMessages() {
final FirebaseFirestore _db = FirebaseFirestore.instance;
_messSubs = _db
.collection('ChatRoom')
.doc(widget.routes)
.collection("messages")
.orderBy("createdAt", descending: true)
.snapshots()
.listen((_mess) {
_messages = _mess.docs.map((doc) => Mess.fromMap(doc.data())).toList();
setState(() {});
});
}
bool _isMe;
TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return SafeArea(
child: Column(
children: [
Expanded(
child: ListView.builder(
reverse: true,
itemCount: _messages.length,
itemBuilder: (BuildContext context, int idx) {
return Column(....)
解决方案
您需要订阅由 生成的流.snapshots()
才能做到这一点。将其应用于您的代码,它可能如下所示:
StreamSubscription subscription;
Stream stream = _db
.collection('ChatRoom')
.doc(widget.routes)
.collection("messages")
.orderBy("createdAt", descending: true)
.snapshots()
subscription?.cancel();
subscription = stream.listen((_mess) {
// do something
});
推荐阅读
- vba - 将 Powerpoint 注释导出到 Excel
- python - Pandas:如何从 excel 文件中读取 DataFrame,其中多行有时由换行符分隔(\n)
- node.js - 如何根据我的组织名称在 nodedk 中为超级账本结构添加自定义隶属关系?
- pine-script - 如何迭代不同的时间范围?
- mrtk - 服务和提供者有什么区别?
- quickbase - 有没有办法使用 Quick Base 中的脚本在富文本字段中使用动态“提及”?
- python - 如何将 jpg 图像加载到 3d rgb numpy 数组
- java - 将 POJO 转换为 JSON 的问题
- algorithm - 使用邻接规则随机化循环链表
- c# - 如何在文件中写入 C# 中的查询结果。例如(姓名工资)