使用 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<DataRow>
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)的主要内容,如果未能解决你的问题,请参考以下文章
将 Firebase Firestore Listview 数据显示为列表 Flutter
Flutter Geofire 和 Firestore 读取问题