遍历不同长度的 Firebase 集合

Iterating through firebase collection of varying lengths

我正在尝试在 列表视图 中显示名为 'user_orders' 的子集合中的数据,每个文档(以绿色突出显示)包含用户在名为 'cart' 的列表中购买。 目的是在列表中显示此购物车数据但问题是购物车的长度varies/changes根据用户订购的内容导致问题(范围错误)时尝试遍历多个 user_orders 个文档

我一直在尝试使用 StreamBuilder,但 [index] 在这种情况下仅 returns 第一个值。我真的是 flutter 的新手,非常感谢您的帮助。

StreamBuilder(
    stream: FirebaseFirestore.instance
            .collection('orders')
            .doc(user.user.uid)
            .collection('user_orders')
            .snapshots(),
    builder: (context, orderSnapshot) {
        return orderSnapshot.hasData
            ? ListView.builder(
                  itemCount: orderSnapshot.data.documents.length,
                  itemBuilder: (BuildContext context, int index) {
                      DocumentSnapshot orderData = orderSnapshot.data.documents[index];
                      return ListTile(
                          title: Text(orderData.get('cart')[index]['title']),
                      );
                  },
              ) : LoadingPage();
           },
       )

您目前只显示每个文档的 cart 值之一。你应该这样做:

 StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance
          .collection('orders')
          .doc("uid")
          .collection('user_orders')
          .snapshots(),
      builder: (context, orderSnapshot) {
        if (orderSnapshot.hasData) {
          final carts = orderSnapshot.data.docs.map((e) => e.get("cart"));
          final cartValues =
              carts.entries.expand((element) => element).toList();

          return ListView.builder(
            itemCount: cartValues.length,
            itemBuilder: (BuildContext context, int index) {
              final title = cartValues[index]["title"];
              return ListTile(
                title: Text(title),
              );
            },
          );
        }
        return LoadingPage();
      },
    );

请注意我没有尝试过运行这段代码,它可能包含错误,但我相信它足以指导你。