【问题标题】:Flutter: How can I get my array data in firestore?Flutter:如何在 Firestore 中获取我的数组数据?
【发布时间】:2019-10-26 01:51:58
【问题描述】:

我正在尝试将我的数据放入 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),
              ),
            )
          ],
        ),
      ],
    ),
  ),
);
}

这是我的数据库结构:

【问题讨论】:

    标签: flutter dart google-cloud-firestore


    【解决方案1】:

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

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

    所以,如果你想显示第一个文档的所有Issue,你可以这样做:

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

    然后buildItem() 将收到Map&lt;String, dynamic&gt;,如下所示:

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

    【讨论】:

    • 它仍然输出一个空值先生@Pablo :(
    • 我更新了我的答案。我无法对其进行测试,但我认为您可以想到让它发挥作用。
    • 我试过了 @Pablo 先生,但它向我展示了这一点,方法 'map' 是在 null 上调用的。接收者:null 尝试调用:map(Closure: (dynamic) => Card)。据说我需要获得大量包含一系列“问题”的文件,而不仅仅是一位先生。请帮忙。我真的需要解决这个问题。在这里卡了多少天了:(
    • 对不起,是第一个['Issue'] 不是第一个['Issues'],请检查更改是否有效。
    • 哦,我太傻了,我在这里拼错了 children snapshot.data.documents.first['Issue']。但现在出现了:( type 'List' is not a subtype of type 'List'
    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 2019-08-08
    • 2021-07-17
    • 2021-07-23
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多