首页 > 解决方案 > Flutter:如何在 Firestore 数据库中获取项目的子项

问题描述

嗨,我有一个 Firestore 数据库,如下所示:

在此处输入图像描述

我试图让数据循环遍历每个聊天并将数据添加到可见性仪表板小部件中,作为聊天的名称和发送的最后一条消息,因此应用程序希望像这样丢失。

在此处输入图像描述

这是我尝试过的代码,我已经四处寻找如何做到这一点,但我只能在 Java 中找到解决方案。

StreamBuilder<QuerySnapshot>(
          stream: _firestore.collection('dashboard').snapshots(),
          builder: (context, snapshot){
            if(!snapshot.hasData){

            }else{
              final dashboards = snapshot.data.documents;
              List<Dashboard> dashboardList = [];
              for (var dashboard in dashboards){

                final String nameOfChat = dashboard.data['chats']['nameOfChat'];
                final String lastMessageSent = dashboard.data['chats']['lastMessageSent'];

                final String username = dashboard.data['displayDashboardTo'];
                final String displayDashboardToUID = dashboard.data['uid'];

                dashboardCard = Dashboard(
                  nameOfChat: nameOfChat,
                  lastMessageSent: lastMessageSent,
                  displayDashboardTo: username,
                );

                dashboardList.add(dashboardCard);

              }

              return Visibility(
                visible: true, 
                child: Expanded(
                  child: ListView(
                    children: dashboardList,
                  ),
                ),
              );
            }
          }
        ),

谢谢。

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


由于“聊天”字段是一个数组,因此您必须遍历它。

final dashboards = snapshot.data.documents;
List<Dashboard> dashboardList = [];
for (var dashboard in dashboards){
final Map data = dashboard.data;

var chats = data['chats'];

for(var chat in chats) {
  final String nameOfChat = chat['nameOfChat'];
  final String lastMessageSent = chat['lastMessageSent'];
  final String username = chat['displayDashboardTo'];
  final String displayDashboardToUID = chat['uid'];

  dashboardCard = Dashboard(
   nameOfChat: nameOfChat,
   lastMessageSent: lastMessageSent,
   displayDashboardTo: username,
 );

dashboardList.add(dashboardCard);

});

}

推荐阅读