Flutter 如何将QueryDocumentsnapshots实例强制转换为列表-Flatter,Firestore

Flutter 如何将QueryDocumentsnapshots实例强制转换为列表-Flatter,Firestore,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我有点困在我的项目中,想了解更多关于颤振的知识,希望你们能帮助我,或者给我一些讲座的建议:) 我的firestore db中有两个集合—一个用户集合和一个组集合 在我的用户文档中,我有一个带有一些组ID的数组。 Groups集合也非常简单-只有一些集合具有唯一ID,并且仅作为字段名称和描述 现在我想要一个包含所有组的列表,用户是其中的一员,因此我必须获得一个包含组ID的列表,然后查询数据库以获取此ID的所有组数据 到现在为止,我正在获取组ID和组的正确数据。 但是如何将这些数据映射到Listvi

我有点困在我的项目中,想了解更多关于颤振的知识,希望你们能帮助我,或者给我一些讲座的建议:)

我的firestore db中有两个集合—一个用户集合和一个组集合

在我的用户文档中,我有一个带有一些组ID的数组。 Groups集合也非常简单-只有一些集合具有唯一ID,并且仅作为字段名称和描述

现在我想要一个包含所有组的列表,用户是其中的一员,因此我必须获得一个包含组ID的列表,然后查询数据库以获取此ID的所有组数据

到现在为止,我正在获取组ID和组的正确数据。 但是如何将这些数据映射到Listview的列表中呢

我的代码-\u buildBody在主体的脚手架内被调用

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年后只搜索代码片段:)