【问题标题】:Firestore Listerner not working as expectedFirestore 侦听器未按预期工作
【发布时间】:2020-09-08 05:19:52
【问题描述】:

我的 Web 应用程序要求我为文档 jkl 使用 firestore 侦听器。它不是打印一次更新的值,而是重复打印该值,即使文档 jkl 中没有更新。

void switchListener() async 
{
  _listener = Firestore.instance
  .collection('abc')
  .document('def')
  .collection('ghi')
  .document('jkl')
  .snapshots()
  .listen((data) => listenerUpdate(data));
}

void listenerUpdate(data) 
{
   String number = data['URL'];
   setState(() {
     _totalDocs = number;
   });
 }

我能得到一些帮助吗?

更新

监听器只有在点击按钮后才会被激活。

onPressed: () {
   switchListener();  
},

void switchListener() async {
  _listener = Firestore.instance
      .collection('abc')
      .document('def')
      .collection('jkl')
      .document('mno')
        .snapshots()
        .distinct()
        .listen((data) => listenerUpdate(data));

  _listener.cancel();

 }

void listenerUpdate(data) {
    String number =  data['physicianNote'];
    String url =  data['signedURL'];
    setState(() {
      _totalDocs = number;
      _signedurl = url;
    });
    print("totalDoc: "+_totalDocs);
    print("url: "+_signedurl);
    js.context.callMethod("open", [signedurl]);

  }

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    您可以尝试在snapshots() 方法之后添加distinct() 方法 如果它们等于前一个数据事件,则跳过数据事件。您可以通过official docs 了解更多信息。

    void switchListener() async 
    {
      _listener = Firestore.instance
      .collection('abc')
      .document('def')
      .collection('ghi')
      .document('jkl')
      .snapshots()
      .distinct() // Will only emit if `snapshots()` emits different data
      .listen((data) => listenerUpdate(data));
    }
    
    void listenerUpdate(data) 
    {
       String number = data['URL'];
       setState(() {
         _totalDocs = number;
       });
     }
    

    【讨论】:

    • 我按照你的建议试过了,但问题仍然存在。
    • @Jasmine 你能显示你调用switchListener()的小部件的代码吗?
    • 我已经更新了代码。只有在单击按钮后才会激活侦听器。
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2012-07-18
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多