Флаттер: Как я могу получить данные моего массива в пожарном депо? - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь получить свои данные в пожарном хранилище, где эти данные являются массивом, и вывести эти данные на карту. На данный момент вывод, который я получаю, является «нулевым». Каков наилучший способ получить этот массив данных? Я использую StreamBuilder<QuerySnapshot> для получения данных.

Вот мой код:

StreamBuilder<QuerySnapshot>(
                stream: db.collection('ACTIVITIES').snapshots(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    return Column(
                        children: snapshot.data.documents
                            .map((doc) => buildItem(doc))
                            .toList());
                  } else {
                    return SizedBox();
                  }
                })

Здесь я пытаюсь вывести данные:

Card buildItem(DocumentSnapshot doc) {
return Card(
  elevation: 5,
  child: Padding(
    padding: const EdgeInsets.all(8),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Text(
          'Name: ${doc.data['Name_ofUser']}',
          style: TextStyle(fontSize: 20),
        ),
        Text(
          'Description: ${doc.data['Help_Description']}',
          style: TextStyle(fontSize: 20),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            FlatButton(
              color: Color(0xFF121A21),
              shape: new RoundedRectangleBorder(
                borderRadius: new BorderRadius.circular(30.0),
              ),
              onPressed: () {},
              child: Text(
                'Respond',
                style: TextStyle(color: Colors.white, fontSize: 12),
              ),
            ),
            SizedBox(
              width: 5,
            ),
            FlatButton(
              color: Color(0xFF121A21),
              shape: new RoundedRectangleBorder(
                borderRadius: new BorderRadius.circular(30.0),
              ),
              onPressed: () {},
              child: Text(
                'Read',
                style: TextStyle(color: Colors.white, fontSize: 12),
              ),
            )
          ],
        ),
      ],
    ),
  ),
);
}

Это моя структура базы данных:

My db link

1 Ответ

2 голосов
/ 26 октября 2019

Ваша коллекция ACTIVITIES может иметь любое количество документов, где каждый документ может иметь любое число Issue.

В вашем случае у вас есть только 1 документ и массив * 1005. *.

Итак, если вы хотите отобразить все Issue первого документа, вы можете сделать что-то вроде этого:

return Column(
    children: snapshot.data.documents.first['Issue']
       .map<Widget>((issue) => buildItem(issue))
       .toList());

Тогда buildItem() получит Map<String, dynamic> вот так:

Card buildItem(Map issue) {

Так что теперь вы можете получить доступ к карте, например так:

issue['Help_Description']

Если вы хотите показать все проблемы из всех документов, один под другимв одном столбце вы можете сделать что-то вроде этого:

final issuesLists = snapshot.data.documents
    .map((doc) =>
        doc['Issue'].map<Widget>((issue) => buildItem(issue)).toList())
    .toList();
return Column(children: issuesLists.expand<Widget>((issues) => issues).toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...