Flutter: как получить дочерние элементы элементов в базе данных Firestore - PullRequest
0 голосов
/ 09 мая 2020

Привет, у меня база данных Firestore выглядит так:

enter image description here

Я пытаюсь получить данные l oop через каждый из чаты и добавьте данные в виджет панели управления видимостью в качестве имени чата и последнего отправленного сообщения, чтобы приложение, надеюсь, потерпело такую ​​неудачу.

enter image description here

Это код, который я пробовал, я искал, как это сделать, но смог найти решение только в 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,
                  ),
                ),
              );
            }
          }
        ),

Спасибо.

1 Ответ

0 голосов
/ 09 мая 2020

Так как поле "chats" представляет собой массив, вам придется oop через него.

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);

});

}
...