Flutter 如何将QueryDocumentsnapshots实例强制转换为列表-Flatter,Firestore
我有点困在我的项目中,想了解更多关于颤振的知识,希望你们能帮助我,或者给我一些讲座的建议:) 我的firestore db中有两个集合—一个用户集合和一个组集合 在我的用户文档中,我有一个带有一些组ID的数组。 Groups集合也非常简单-只有一些集合具有唯一ID,并且仅作为字段名称和描述 现在我想要一个包含所有组的列表,用户是其中的一员,因此我必须获得一个包含组ID的列表,然后查询数据库以获取此ID的所有组数据 到现在为止,我正在获取组ID和组的正确数据。 但是如何将这些数据映射到Listview的列表中呢 我的代码-\u buildBody在主体的脚手架内被调用Flutter 如何将QueryDocumentsnapshots实例强制转换为列表-Flatter,Firestore,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我有点困在我的项目中,想了解更多关于颤振的知识,希望你们能帮助我,或者给我一些讲座的建议:) 我的firestore db中有两个集合—一个用户集合和一个组集合 在我的用户文档中,我有一个带有一些组ID的数组。 Groups集合也非常简单-只有一些集合具有唯一ID,并且仅作为字段名称和描述 现在我想要一个包含所有组的列表,用户是其中的一员,因此我必须获得一个包含组ID的列表,然后查询数据库以获取此ID的所有组数据 到现在为止,我正在获取组ID和组的正确数据。 但是如何将这些数据映射到Listvi
Widget _buildBody() {
User _currentUser = FirebaseAuth.instance.currentUser;
DocumentReference docRef = FirebaseFirestore.instance.collection('user').doc(_currentUser.uid);
return StreamBuilder(
stream: docRef.snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if(snapshot.hasError){
return Error();
}
if(snapshot.connectionState == ConnectionState.waiting){
return Loading();
}
//Get all my Group Ids
final List<dynamic> documents = snapshot.data.get('groups');
Future<List<Map>> _groups = getGroups(documents);
//return ListView with Data
return ListView(...);
}
);
Future <List<Map<dynamic, dynamic>>> getGroups(List<dynamic> documents) async{
List<QueryDocumentSnapshot> group_docs;
List<Map<dynamic, dynamic>> list = new List();
QuerySnapshot collectionSnapshot = await FirebaseFirestore.instance.
collection('groups').where('id', whereIn: documents).get();
//Now I have all QueryDocumentSnapshots as a instance inside the list
group_docs = collectionSnapshot.docs;
//What now?! :D
return list;
Widget\u buildBody(){
用户_currentUser=FirebaseAuth.instance.currentUser;
DocumentReference docRef=FirebaseFirestore.instance.collection('user').doc(_currentUser.uid);
返回流生成器(
流:docRef.snapshots(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasError){
返回错误();
}
if(snapshot.connectionState==connectionState.waiting){
返回加载();
}
//获取我所有的组ID
最终列表文档=snapshot.data.get('groups');
Future _groups=getGroups(文档);
//返回包含数据的ListView
返回ListView(…);
}
);
未来的GetGroup(列表文档)异步{
列出分组单据;
列表=新列表();
QuerySnapshot collectionSnapshot=等待FirebaseFirestore.instance。
集合('groups')。其中('id',其中:documents)。get();
//现在我将所有QueryDocumentSnapshot作为列表中的一个实例
group_docs=collectionSnapshot.docs;
//现在怎么办
退货清单;
}
大thx。它可以如下所示:
List<Map<dynamic, dynamic>> list = [];
list = snapshot.docs.map((doc) => doc.data() ).toList();
List=[];
list=snapshot.docs.map((doc)=>doc.data()).toList();
提示:您也可以看到,我修改了列表类的实例。当然,这不会影响答案,但我建议您习惯以这种方式实例化列表。Big Thx-现在可以了。可能是个愚蠢的问题,但我仍在学习-为什么要这样实例化?@learn2Dev这不是一个愚蠢的问题。这是一个这是它的一部分!这是文档的一个建议。即使你看看Android Studio,你也会发现你的做法已经过时了。map{}也是如此。别忘了标记为问题的答案。=)Thx man。因此,防止它的一个好主意可能是在2020年后只搜索代码片段:)