我正在尝试使用以下代码来监听文档更改:(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)
我在做什么错了?
谢谢!
答案 0 :(得分:1)
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;
});
});
我怀疑这会改变您查询的问题,但我建议您采用任何一种方式进行更改,因为这可以简化您的侦听器并使它更加惯用。