【问题标题】:Listening to Stream doesn't get same result as StreamBuilder with Firebase使用 Firebase 收听 Stream 的结果与 StreamBuilder 不同
【发布时间】:2021-08-28 17:26:31
【问题描述】:

我正在使用 firebase,我有这个:

Stream<QuerySnapshot> qs = FirebaseFirestore.instance
        .collection("$mypath")
        .orderBy(order)
        .limit(10)
        .startAfterDocument(lastDoc)
        .snapshots();

当我将qs 传递给StreamBuilder 时,返回的快照可以执行snapshot.hasError

      StreamBuilder(
        stream: qs, 
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (snapshot.hasError) ... // hasError works
        },
      )

但是,当我收听流时,不再识别 hasError、hasData ...之类的内容

    qs.listen((event) {
      if (event.hasError) // error: The getter 'hasError' isn't defined for the type 'QuerySnapshot<Object?>'.
    });

我仍然可以event.docs 并且我成功获取了数据,但是我无法侦听错误。我做错了吗?

【问题讨论】:

    标签: flutter google-cloud-firestore flutter-streambuilder


    【解决方案1】:

    hasErrorhasData 是在AsyncSnapshot object 上定义的属性,并且仅在您位于StreamBuilder 内部时才存在,它实质上包装了异步操作的状态。当您在代码中调用 AsyncSnapshot.data 时,您会返回封装 Firebase 数据的 QuerySnapshot

    当您自己收听流时,没有AsyncSnapshot,您从QuerySnapshot 开始,这是一个定义为here 的Firestore 对象。如您所见,它没有hasErrorhasData,因为它们的暴露方式不同。

    这绝对是一开始的困惑,因为这里涉及到很多类型的快照,所以我建议查看What is the difference between existing types of snapshots in Firebase?

    【讨论】:

    • 使用 firebase 已经一年了,它仍然令人困惑! ...我要做的是从只有 Bloc 可以访问的 Repository 类中获取数据,并将数据提供给可用的小部件。 QuerySnapshot 是可行的,但我现在看不出有什么办法来处理这些错误。是否可以这样做,或者我应该从小部件中获取数据,并将它们与 Bloc 同步?
    • 当您自己收听流时,处理错误的方式会有所不同。据我所知,您可以使用handleError 检查错误:api.dart.dev/stable/2.13.1/dart-async/Stream/handleError.html
    • 我添加了这个...snapshots().handleError( (e) =&gt; print("11111 $e"),但该函数永远不会执行。我猜firebase会在内部处理错误(这就是AsyncSnapshot中hasError的方式)并且不会重新抛出它以供handleError收听。
    • 我对这部分不太熟悉,但这就是它的实现方式(对于 Android,但所有平台的工作方式几乎相同):github.com/FirebaseExtended/flutterfire/blob/… 然后在 Flutter 方面:@ 987654326@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2020-10-12
    • 1970-01-01
    • 2021-07-19
    • 2021-07-04
    相关资源
    最近更新 更多