如何在 Cloud Firestore 中使用 Stream 回调

Posted

技术标签:

【中文标题】如何在 Cloud Firestore 中使用 Stream 回调【英文标题】:How to use Stream callbacks in Cloud Firestore 【发布时间】:2019-12-12 06:06:58 【问题描述】:

我有几个问题(我是 Dart 的新手)关于我找到的下面的代码。我想要达到的目标: 1)在括号中写多行以表示错误。但是我收到错误消息,说'set literals were supported up to 2.2....'。最好知道可能的错误列表,以便我可以相应地提醒用户。

2) 增加与文档数量相关的计数器,并继续将文档 ID 存储在一个变量中,如果找到多个文档,则覆盖最后一个值。我正在尝试检查是否应该只有一个文档,如果计数器变为 2,则采取行动。

void _checkIfAdmin() 
Firestore.instance
    .collection('Admin')
    .where('Email', isEqualTo: widget._user.email)
    .snapshots()
    .handleError((error)=>
      //
      )
    .listen((data) => data.documents.forEach((doc) => gpCounter+=1)); // Store document id?
print('Counter: $gpCounter');

当我知道那里有两个文档时,我正在打印 gpCounter=0。我尝试在函数中添加 async/await,但似乎 firebase 语句没有返回任何未来,所以我收到警告,仅将 await 用于未来。

【问题讨论】:

【参考方案1】:

我会尽量解决您的问题中我能理解的问题。如果您有任何其他问题,您可能应该再问一个问题。

    设置文字:匿名函数的语法是 () 而不是 () => () => 是返回单个表达式的值的简写语法,并且在您的情况下,您将在匿名函数中返回 Set,因为 创建 Set(或 Map,如果您有冒号)。 解决方案是(error) ...

    同步打印您的gpCounter值,但是,您正在收听Stream。 因此,您应该将您的 print 语句移动到您的 listen 函数中:

    .listen(data) 
        print('Counter: $data.documents.length');
      )

【讨论】:

谢谢。是的,这对我来说很有意义。但是我什么时候可以使用这些变量呢?即,我怎么知道它们已准备好在代码中的其他地方使用? 我实际上想在这个函数之外使用接收到的'documentID'的值,不知道该怎么做。有没有办法一次性获取此文档列表? @Damandroid 是的,您可以使用getDocumentsawait that Future 或使用FutureBuilder

以上是关于如何在 Cloud Firestore 中使用 Stream 回调的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firestore 在 Cloud Functions for Firebase 中获取服务器时间戳?

如何在 Cloud Firestore 中使用 Stream 回调

查询时如何在 Flutter (Dart) 中使用变量 Cloud Firestore

cloud_firestore 0.14.0 如何使用数据方法

在 Dart 的 Cloud Firestore 中添加文档后如何获取文档 ID

如何从云函数动态地在 Cloud Firestore 中创建集合