首页 > 解决方案 > 如何将 QueryDocumentsnapshots 的实例转换为列表 - Flutter、Firestore

问题描述

我在我的项目中有点卡住,以了解更多关于颤振的信息,希望你能帮助我或给我一些讲座的建议:)

我的 Firestore 数据库中有两个集合 - 一个用户和一个组集合。

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

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

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

我的代码 - _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;

}

非常感谢。

标签: fluttergoogle-cloud-firestore

解决方案


它可以如下:

List<Map<dynamic, dynamic>> list = [];

list = snapshot.docs.map((doc) => doc.data() ).toList();

提示:您还可以看到,我修改了您的 List 类实例。当然,它不会影响答案,但我建议您习惯以这种方式实例化列表。


推荐阅读