flutter - Flutter:如何在Firestore中获取阵列数据?

标签 flutter dart google-cloud-firestore

我正在尝试将我的数据存储在Firestore中,其中该数据是数组并将其输出到卡中。到目前为止,我得到的输出为“null”。获取此数据数组的最佳方法是什么?我正在使用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

最佳答案

您的ACTIVITIES集合可以具有任意数量的文档,其中每个文档可以具有任意数量的Issue

在您的情况下,您只有1个文档,并且具有Issue数组。

因此,如果要显示第一个文档的所有Issue,则可以执行以下操作:

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

然后buildItem()将收到一个Map<String, dynamic>,如下所示:
Card buildItem(Map issue) {

因此,现在您可以像这样访问 map :
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());

关于flutter - Flutter:如何在Firestore中获取阵列数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567437/

相关文章:

listview - Flutter(Dart):突出显示或选择onLongPress事件中的小部件(平铺或任何元素)

widget - Flutter 方向错误的尺寸错误

flutter 错误 : WidgetsBinding. 实例!.addPostFrameCallback((_) {

javascript - 如何检查当前用户是否已填写文档?

java - 如何在没有此问题的情况下有效地在Firestore聊天应用程序中存储或检索消息?

xcode - flutter Xcode : clang: error: linker command failed with exit code 1 (use -v to see invocation)

firebase - Flutter Firestore更新地​​图项

flutter - 我怎样才能使这个单选 flutter ?

flutter - 在 flutter 中使用提供者时如何避免不必要的重建?

firebase - 在本地测试 Cloud Functions 时,Cloud Firestore 模拟器未运行