firebase - Firestore 不侦听查询 (Flutter)
问题描述
我正在尝试使用以下代码收听文档更改:(Flutter)
Firestore.instance
.collection('myCollection')
.where("owners.${myUserID}", isEqualTo: true)
.orderBy("lastRef", descending: true)
.snapshots()
.listen((data) {
print("listening");
data.documentChanges.forEach((change) {
setState(() {
myList = data.documents;
});
});
});
这段代码只工作一次,它将所有正确的文档添加到列表中,但是当文档更新时,它什么也不做......
我试过这段代码(没有 where 查询)
Firestore.instance
.collection('myCollection')
.orderBy("lastRef", descending: true)
.snapshots()
.listen((data) {
print("listening");
data.documentChanges.forEach((change) {
setState(() {
myList = data.documents;
});
});
});
完美运行,即使文档已更新
我以为我必须建立一个索引,但我没有在控制台中看到任何消息。尝试手动创建一个。
Indexed fields: owners (array), lastRef (descending)
我究竟做错了什么?
提前致谢!
解决方案
在我看来,电话data.documentChanges.forEach((change) {
周围的情况setState
很可疑。据我所知,每当您的侦听器被调用时,您都应该将文档设置为状态。
所以像:
Firestore.instance
.collection('myCollection')
.where("owners.${myUserID}", isEqualTo: true)
.orderBy("lastRef", descending: true)
.snapshots()
.listen((data) {
setState(() {
myList = data.documents;
});
});
我怀疑它会改变您查询的问题,但我建议以任何一种方式进行更改,因为它可以简化您的听众并使其更加惯用。
推荐阅读
- typescript - Typeorm 列值来自清理过的其他列值
- r - 删除图例中的行
- kubernetes - 服务的 Kubernetes 默认负载均衡器在本地运行?
- node.js - 如何在不出现此错误的情况下将 unix 日期传递给时刻 js:“弃用警告:提供的值不是可识别的 RFC2822 或 ISO 格式。”
- ios - 由于奇怪的 UINavigationBar 视图层次结构,自定义 UINavigationBar 不起作用
- sql - 在两个日期之间和两次之间
- java - 重启spring boot后如何恢复ScheduledExecutorService的任务?
- java - 在 Java、Windows 10 中控制外部 USB 声卡上的 8 声道环绕声
- python - 保存和加载后keras模型预测为nan
- python - 如何接受子类中的附加参数?(没有 pylint 的论点 - 不同)