使用 Firestore 和 Flutter 填充 DataTable(使用 StreamBuilder)

Posted

技术标签:

【中文标题】使用 Firestore 和 Flutter 填充 DataTable(使用 StreamBuilder)【英文标题】:Filling a DataTable with Firestore and Flutter (using StreamBuilder) 【发布时间】:2018-11-16 21:12:13 【问题描述】:

如何使用 StreamBuilder 填充 DataTable?

下面是我的代码:

          new StreamBuilder(
            stream: widget._returnStreamWithActiveKeysOnly(),
            builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) 
              if (!snapshot.hasData) return new Text('Loading...');
              return new DataTable(
                columns: <DataColumn>[
                  new DataColumn(
                    label: Text('type'),
                    tooltip: 'Ordinary or service (1 day only, restricted time)',
                  ),
                  new DataColumn(label: Text('Key')),
                  new DataColumn(label: Text('Check-in')),
                  new DataColumn(label: Text('Check-out')),
                ],
                rows: _listOfRows(snapshot),

              );
            ,
          )

我找不到一种方法(如内置构建器)来指示要传递给 _listOfRows 函数的文档索引,或者如何访问每个流的当前文档。

【问题讨论】:

【参考方案1】:

我不知道哪些数据来自您的流,但这里是关于如何做到这一点的想法:

 DataTable(
   rows: _createRows(snapshot.data),
 )

您希望构建器方法返回 List&lt;DataRow&gt;

  List<DataRow> _createRows(QuerySnapshot snapshot) 

    List<DataRow> newList = snapshot.documents.map((DocumentSnapshot documentSnapshot) 
      return new DataRow(cells: _createCellsForElement(documentSnapshot["someDataYouWantToProcessForCellData"]));
    ).toList();

    return newList;
  

您可以应用相同的逻辑来创建单元格,也可以在第一个地图函数中执行此操作。

【讨论】:

工作就像一个魅力!非常感谢! @树 我在 PaginatedDataTable 中使用了相同的逻辑,但是通过点击列标题进行排序不起作用。排序对你有用吗? 谢谢你!您能否澄清"someDataYouWantToProcessForCellData" 的含义或提供一个示例?无论我输入什么,我都会收到错误没有为类型“DocumentSnapshot”定义运算符“[]” 在回答我之前的评论时,这里有一个可以用来代替“someDataYouWantToProcessForCellData”占位符的示例:return new DataRow(cells: [ DataCell(Text(documentSnapshot.data()['Name'].toString())),,其中Name 是我的 Firestore 文档中的一个字段。 请你告诉mw如何为_createCellsForElement@Tree编写代码

以上是关于使用 Firestore 和 Flutter 填充 DataTable(使用 StreamBuilder)的主要内容,如果未能解决你的问题,请参考以下文章

Firestore 查询变量以填充共享首选项

将 Firebase Firestore Listview 数据显示为列表 Flutter

Flutter - 从 Stream 接收然后修改数据

Flutter Geofire 和 Firestore 读取问题

Firestore 为 noSQL 和 Flutter 复制 SQL 连接

Flutter:Firebase 身份验证和 Firestore 快照流