如何解决使用 Firebase 收听 Stream 的结果与 StreamBuilder 不同
我正在使用 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
并成功获取数据,但我无法侦听错误。我做错了什么吗?
解决方法
hasError
和 hasData
是定义在 AsyncSnapshot
object 上的属性,仅当您在 StreamBuilder
内部时才存在,它本质上包装了异步的状态手术。当您在代码中调用 AsyncSnapshot.data
时,您会取回封装来自 Firebase 的数据的 QuerySnapshot
。
当您自己收听流时,没有 AsyncSnapshot
,您从 QuerySnapshot
开始,它是定义为 here 的 Firestore 对象。如您所见,它没有 hasError
或 hasData
,因为它们的公开方式不同。
这在最初肯定会令人困惑,因为这里涉及多种类型的快照,因此我建议您查看 What is the difference between existing types of snapshots in Firebase?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。