遍历不同长度的 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();
},
);
请注意我没有尝试过运行这段代码,它可能包含错误,但我相信它足以指导你。
我正在尝试在 列表视图 中显示名为 '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();
},
);
请注意我没有尝试过运行这段代码,它可能包含错误,但我相信它足以指导你。