【问题标题】:Firestore doesn't listen for query (Flutter)Firestore 不侦听查询 (Flutter)
【发布时间】:2020-06-06 19:06:55
【问题描述】:

我正在尝试使用以下代码监听文档更改:(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)myUserID 的值? (例如,通过在运行查询之前打印它),2)查询应该返回的文档的屏幕截图?

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

setState 呼叫周围的 data.documentChanges.forEach((change) { 对我来说看起来很可疑。据我所知,无论何时调用您的侦听器,您都应该将文档设置为状态。

比如:

Firestore.instance
    .collection('myCollection')
    .where("owners.${myUserID}", isEqualTo: true)
    .orderBy("lastRef", descending: true)
    .snapshots()
    .listen((data) {
  setState(() {
    myList = data.documents;
  });
});

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

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2020-10-24
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2021-07-12
    • 2020-01-24
    相关资源
    最近更新 更多