flutter - 遍历不同长度的firebase集合
问题描述
我试图在列表视图中显示名为“user_orders”的子集合中的数据,每个文档(以绿色突出显示)包含用户在名为“购物车”的列表中购买的项目。目的是在列表中显示此购物车数据,但问题是购物车的长度会根据用户订购的内容而变化/变化,这会在尝试遍历多个 user_orders 文档时导致问题(范围错误)
我一直在尝试使用 StreamBuilder 但在这种情况下 [index] 只返回第一个值。我真的很陌生,非常感谢您的帮助。
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();
},
);
请注意我没有尝试运行这段代码,它可能包含错误,但我相信它足以指导你。
推荐阅读
- c# - 如何更新 TFS 中没有数据的字段的工作项
- android - Nativescript 指纹认证插件 - 在 verifyFingerprint 承诺后无法记录任何内容
- apache-spark - 火花 sql 枢轴
- airflow - 了解 Airflow 的 execution_date 和 schedule
- mongodb - mongoDB:$dateToString 格式以 15 分钟间隔显示时间
- terraform - 使用 Terraform 在 AWS Cognito 用户池中设置 Facebook API 版本
- c# - Roslyn 代码生成,如何为给定类型创建类型表达式
- swift - 不同版本的 Swift 给我错误
- javascript - 将烹饪脚本注入 WKWebView 后出现意外的 cookie 域
- postgresql - Hasura 中的一个计算域,它返回一个整数数组