首页 > 解决方案 > 在 Flutter 中迭代 Firestore 文档

问题描述

我有这个代码片段,我想知道是否有一种方法可以遍历 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');
          }
        }
      )
    );
  }

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

  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)
        )
      ],
    );
  }

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


要构建一个列表视图,在这种情况下,您可以通过迭代文档来使用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'])
                  ),
                ],
              )
          );

推荐阅读