Firestore不侦听查询(Flutter)

时间:2020-02-22 16:16:40

标签: firebase flutter dart google-cloud-firestore

我正在尝试使用以下代码来监听文档更改:(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)

我在做什么错了?

谢谢!

1 个答案:

答案 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;
  });
});

我怀疑这会改变您查询的问题,但我建议您采用任何一种方式进行更改,因为这可以简化您的侦听器并使它更加惯用。