flutter 和 firebase 以及子集合
flutter and firebase and sub-collections
我一直在高低搜索。希望有人能帮忙!
Firestore 设置:
usersCollection -> userID 列表 -> itemsCollection -> itemID 列表 -> item_name 等
我能找到的很多示例都针对特定的用户 ID。我想要的是从所有用户 ID 加载所有 itemID。因此:
- 用户 1
- ---- item1
- ---- item2
- ---- item3
- 用户 2
- ---- item1
- ---- item2
- 等等……
我不需要像上面那样显示,我想显示所有项目(最终使用userID来操作数据)。有些人建议嵌套流媒体,但这会消耗很多能量(我不喜欢这个想法)
然后我在考虑使用某种 2D for 循环,或者我还看到了 for each 循环。我相信这些会更合适....
我知道如何获取用户列表,但我需要获取每个用户的项目列表...我如何获取该部分!?目前我正在尝试在带有图块的列表视图中显示信息,但现在我只需要知道如何访问项目列表。
我试过这样做。
List listUsers = await FirebaseFirestore.instance
.collection("users")
.get();
for (int i = 0; i < listUsers.length; i++) {
FirebaseFirestore.instance
.collection("users")
.doc(listUsers[i].documentID.toString())
.collection("items")
.snapshots();
}
但我们不能忘记还有一个项目列表所以....
List listUsers = await FirebaseFirestore.instance
.collection("users")
.get();
List listItems = await FirebaseFirestore.instance
.collection("items")
.get();
for (int i = 0; i < listUsers.length; i++) {
for (int j = 0; j < listItems.length; j++) {
FirebaseFirestore.instance
.collection("users")
.doc(listUsers[i].documentID.toString())
.collection("items")
.doc(listItems[j].documentID.toString())
.snapshots();
}
??????????????请帮忙...
==============编辑============================== =
回答
List listItems = await FirebaseFirestore.instance
.collectionGroup('items')
.get()
.then((value) => value.docs);
然后您像这样访问列表项及其值:
print('OMG------------ ${listItems[0].documentID.toString()}'); //document ID
print('OMG------------ ${listItems[0].data()['item_name']}'); // specific value within collection
如果我理解正确的话,这看起来像是 collectionGroup
的示例,其中包含具有相同 ID 的所有集合。您可以在 Firebase documentation.
上查看一般概念
当然Flutter也有这个功能的实现。你可以找到它 documentation on pub.dev.
我一直在高低搜索。希望有人能帮忙!
Firestore 设置: usersCollection -> userID 列表 -> itemsCollection -> itemID 列表 -> item_name 等
我能找到的很多示例都针对特定的用户 ID。我想要的是从所有用户 ID 加载所有 itemID。因此:
- 用户 1
- ---- item1
- ---- item2
- ---- item3
- 用户 2
- ---- item1
- ---- item2
- 等等……
我不需要像上面那样显示,我想显示所有项目(最终使用userID来操作数据)。有些人建议嵌套流媒体,但这会消耗很多能量(我不喜欢这个想法)
然后我在考虑使用某种 2D for 循环,或者我还看到了 for each 循环。我相信这些会更合适....
我知道如何获取用户列表,但我需要获取每个用户的项目列表...我如何获取该部分!?目前我正在尝试在带有图块的列表视图中显示信息,但现在我只需要知道如何访问项目列表。
我试过这样做。
List listUsers = await FirebaseFirestore.instance
.collection("users")
.get();
for (int i = 0; i < listUsers.length; i++) {
FirebaseFirestore.instance
.collection("users")
.doc(listUsers[i].documentID.toString())
.collection("items")
.snapshots();
}
但我们不能忘记还有一个项目列表所以....
List listUsers = await FirebaseFirestore.instance
.collection("users")
.get();
List listItems = await FirebaseFirestore.instance
.collection("items")
.get();
for (int i = 0; i < listUsers.length; i++) {
for (int j = 0; j < listItems.length; j++) {
FirebaseFirestore.instance
.collection("users")
.doc(listUsers[i].documentID.toString())
.collection("items")
.doc(listItems[j].documentID.toString())
.snapshots();
}
??????????????请帮忙...
==============编辑============================== =
回答
List listItems = await FirebaseFirestore.instance
.collectionGroup('items')
.get()
.then((value) => value.docs);
然后您像这样访问列表项及其值:
print('OMG------------ ${listItems[0].documentID.toString()}'); //document ID
print('OMG------------ ${listItems[0].data()['item_name']}'); // specific value within collection
如果我理解正确的话,这看起来像是 collectionGroup
的示例,其中包含具有相同 ID 的所有集合。您可以在 Firebase documentation.
当然Flutter也有这个功能的实现。你可以找到它 documentation on pub.dev.