【问题标题】:How to cast an Instance of QueryDocumentsnapshots into a List - Flutter, Firestore如何将 QueryDocumentsnapshots 的实例转换为列表 - Flutter、Firestore
【发布时间】:2021-01-04 17:23:13
【问题描述】:

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

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

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

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

现在我正在取回组 ID 和组的正确数据。 但是如何将这些数据映射到 Listview 的 List 中?

我的代码 - 在主体的脚手架内调用 _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;

}

非常感谢。

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    可以如下:

    List<Map<dynamic, dynamic>> list = [];
    
    list = snapshot.docs.map((doc) => doc.data() ).toList();
    

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

    【讨论】:

    • 非常感谢 - 现在可以使用了。也许是愚蠢的问题,但因为我还在学习 - 你为什么要这样实例化?
    • @learn2Dev 这不是一个愚蠢的问题。这是它的一部分!这是文档的建议。即使您查看 Android Studio,您也会发现您的做法已经过时。地图 {} 也是如此。不要忘记标记为问题的答案。 =)
    • 谢谢人。因此,防止它仅在 2020 年之后搜索代码 sn-ps 可能是一个好主意:)
    猜你喜欢
    • 2020-10-26
    • 2019-04-08
    • 2020-03-21
    • 2021-08-29
    • 2020-01-16
    • 2020-11-19
    • 2022-11-07
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多