Flutter Firebase:状态不佳:快照既没有数据也没有错误

Posted

技术标签:

【中文标题】Flutter Firebase:状态不佳:快照既没有数据也没有错误【英文标题】:Flutter Firebase: Bad state: Snapshot has neither data nor error 【发布时间】:2021-12-23 00:57:40 【问题描述】:

我正在尝试从表 Products 中获取 P_ID 添加到购物车的特定产品 现在下面的代码运行良好,但只检索一个元素

final Stream<QuerySnapshot> cart = FirebaseFirestore.instance
        .collection('products')
        .where('pid', isEqualTo: cartitems[0])
        .snapshots();

但是当我这样做时它不起作用

Stream<QuerySnapshot>? cart;
for (var i = 0; i < cartitems.length; i++) 
  cart = FirebaseFirestore.instance
      .collection('products')
      .where('pid', isEqualTo: cartitems[i])
      .snapshots();

它给了我这个错误

在构建 StreamBuilder>(dirty, state: _StreamBuilderBaseState, AsyncSnapshot>>#9ea5d) 时引发了以下 StateError: 坏状态:快照既没有数据也没有错误

相关的导致错误的小部件是: StreamBuilder> StreamBuilder

【问题讨论】:

【参考方案1】:

您可以尝试使用 Stream Builder 来代替 for 循环来实现相同的效果。 Stream Builder 将自动取出您存储在 firebase 中的所有购物车项目。要摆脱快照错误,请执行下面的 if 语句。

final CollectionReference cart = FirebaseFirestore.instance.collection('products');
child: StreamBuilder(
        stream: cart
            .where('pid', isEqualTo: cartitems)
            .snapshots();
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)  
        if (!snapshot.hasData) 
            return const Text('Loading...');
         
        if (snapshot.hasError) 
            return const Text('Something went wrong.');
        

【讨论】:

以上是关于Flutter Firebase:状态不佳:快照既没有数据也没有错误的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:Firebase 身份验证和 Firestore 快照流

Flutter 按时间戳对 Firebase 快照进行排序

如何在firebase-flutter中为快照数据指定字段[重复]

在加载 Firebase 快照时使用 Flutter 中的 Bloc 流式等待和阻止其他事件

在 Flutter 中从 Firebase FireCloud 接收数据时,StreamBuilder 中的快照代码不会被执行

Flutter:StreamBuilder 快照——无数据