【问题标题】:How to use Stream callbacks in Cloud Firestore如何在 Cloud Firestore 中使用 Stream 回调
【发布时间】: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 用于未来。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。是的,这对我来说很有意义。但是我什么时候可以使用这些变量呢?即,我怎么知道它们已准备好在代码中的其他地方使用?
    • 我实际上想在这个函数之外使用接收到的'documentID'的值,不知道该怎么做。有没有办法一次性获取此文档列表?
    • @Damandroid 是的,您可以使用getDocumentsawait that Future 或使用FutureBuilder
    猜你喜欢
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2021-03-29
    • 2019-11-03
    相关资源
    最近更新 更多