0

我正在使用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并且我成功地获取了数据,但是我无法监听错误。难道我做错了什么?

4

1 回答 1

1

hasError和是在objecthasData上定义的属性,并且仅在您位于 内部时才存在,它本质上包装了异步操作的状态。当你调用你的代码时,你会从 Firebase 中取回封装数据。AsyncSnapshotStreamBuilderAsyncSnapshot.dataQuerySnapshot

当您自己收听流时,没有AsyncSnapshot,您以 a 开头,它是此处QuerySnapshot定义的 Firestore 对象。正如你所看到的,那没有或因为那些暴露的不同。hasErrorhasData

这最初肯定会令人困惑,因为这里涉及到很多类型的快照,所以我建议查看Firebase 中现有快照类型之间的区别是什么?

于 2021-06-11T19:44:04.713 回答