【问题标题】:Iterate over a Firestore Document in Flutter在 Flutter 中迭代 Firestore 文档
【发布时间】:2020-11-06 19:16:00
【问题描述】:

我有这段代码 sn-p,我想知道是否有一种方法可以遍历 firestore 文档以获取它们的字段名称以及它们的值。我的目标是不用担心代码,以便我可以随意操作 firebase 存储中的每个文档。

提前致谢!

  Widget MainBody(){

    return SingleChildScrollView(
      child: StreamBuilder(
        stream: firestore.collection('painel').snapshots(),
        builder: (context, snapshot){


          if(docNumber != null){
          if (!snapshot.hasData) return Text('Carregando');
          return ListView(
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            children: <Widget>[
              Row(
                children: <Widget>[
                  Expanded(
                    flex: 1,
                    child: Text('Campo 1')
                  ),
                  Expanded(
                      flex: 3,
                      child: Text(snapshot.data.documents[docNumber]['campo1']) //change campo1 with some iterable
                  ),
                       .
                       .
                       .
                  Expanded(
                    flex: 1,
                    child: Text('Campo n')
                  ),
                  Expanded(
                      flex: 3,
                      child: Text(snapshot.data.documents[docNumber]['campon'])
                  ),
                ],
              )
            ],
          );
          }else{
            return Text('Por favor, escaneie');
          }
        }
      )
    );
  }

编辑:我只是想知道怎么做,这是代码 sn-p。我很乐意听到任何改进。哇!

  Widget MainBody() {
    return SingleChildScrollView(
      child: StreamBuilder(
          stream: Firestore.instance.collection('painel').snapshots(),
          builder: (context, snapshot) {

            if (docNumber != null){

             var docData = snapshot.data.documents[docNumber].data; 
             int docLen = docData.length;

             if (!snapshot.hasData) return Text('Loading');
              return ListView.builder(
                  scrollDirection: Axis.vertical,
                  shrinkWrap: true,
                  itemCount: docLen,
                  itemBuilder: (context,index) =>
                      buildItem(context, docData.keys.elementAt(index), docData.values.elementAt(index))
              );
            } else {
              return Text('Not found.');
            }
          }
      ),
    );
  }

    Widget buildItem(BuildContext context, documentKey, documentValue){
    return Row(
      children: <Widget>[
        Expanded(
          flex: 1,
          child: Text(documentKey)
        ),
        Expanded(
            flex: 3,
            child: Text(documentValue)
        )
      ],
    );
  }

【问题讨论】:

  • 文档快照只是地图对象。如果这是您的要求,您可以像 dart 中的任何其他 Map 一样迭代它们。
  • 是的,但是如何从文档中获取字段名称?
  • 当您迭代地图时,其键将是每个字段的名称。

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

要构建一个列表视图,在这种情况下,您可以通过迭代文档来使用 Listview.Builder()。您可以遍历您的文档,如下所示。

final docs =snapshot.data.documents;
return ListView.builder(
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            itemCount: docs.length,
            itemBuilder: (ctx, index)=>
              Row(
                children: <Widget>[
                  Expanded(
                    flex: 1,
                    child: Text('Campo 1')
                  ),
                  Expanded(
                      flex: 3,
                      child: Text(docs[index]['campo1']) //change campo1 with some iterable
                  ),
                       .
                       .
                       .
                  Expanded(
                    flex: 1,
                    child: Text('Campo n')
                  ),
                  Expanded(
                      flex: 3,
                      child: Text(docs[index]['campon'])
                  ),
                ],
              )
          );

【讨论】:

  • 我的错,你一定误会了我。我要迭代的是“campo1”插槽,而不是您所做的 docNumber/index。我一定是用词错了。无论如何感谢您的帮助:)
  • @BrunoAntonieto 那么,您找到解决方案了吗?
猜你喜欢
  • 2020-07-02
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2022-07-22
  • 2021-07-20
  • 2019-04-26
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多