Я просмотрел inte rnet и ничего не встречал, и, конечно, я не единственный, кто хочет работать с PaginatedDataTable и Firebase.
У меня есть довольно простая таблица для создания:
Страница со списком
class CentreViewEnquiriesList extends StatefulWidget {
final CentreData centreData;
CentreViewEnquiriesList({this.centreData});
@override
_CentreViewEnquiriesList createState() => _CentreViewEnquiriesList();
}
class _CentreViewEnquiriesList extends State<CentreViewEnquiriesList> {
int _rowsPerPage = PaginatedDataTable.defaultRowsPerPage;
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(20),
child: PaginatedDataTable(
header: Text('Enquiries'),
columns: [
DataColumn(label: Text('Enquiry Date')),
DataColumn(label: Text('Enquiry Person')),
DataColumn(label: Text('Enquiry Status')),
],
source: EnquiryDataSource(widget.centreData),
onRowsPerPageChanged: (r) {
setState(() {
_rowsPerPage = r;
});
},
rowsPerPage: _rowsPerPage,
),
),
);
}
}
DataTableSource
class EnquiryDataSource extends DataTableSource {
CentreData centreData;
EnquiryDataSource(this.centreData);
@override
DataRow getRow(int index) {
return DataRow.byIndex(index: index, cells: [
DataCell(Text('Date Cell')),
DataCell(Text('Name Cell')),
DataCell(Text('Status Cell')),
]);
}
@override
// TODO: implement isRowCountApproximate
bool get isRowCountApproximate => true;
@override
// TODO: implement rowCount
int get rowCount => 15;
@override
// TODO: implement selectedRowCount
int get selectedRowCount => 0;
}
Обычно я Я использовал бы что-то вроде StreamBuilder, но так как для класса требовалось бы состояние, он не будет работать.
Вот как я получаю данные:
//List of Enquiries to show on CentreView Enquiries DataTable
List<EnquiryData> _enquiryListFromSnapshot(QuerySnapshot snapshot){
return snapshot.documents.map((doc) {
return EnquiryData(
enquiryID: doc.data['enquiryID'],
parentFirstName: doc.data['firstName'],
parentLastName: doc.data['lastName'],
enquiryStatus: doc.data['enquiryStatus'],
);
});
}
//get stream of all enquiries
Stream<List<EnquiryData>> get enquiries {
return centresCollection.document(centreID).collection('enquiries').snapshots().map(_enquiryListFromSnapshot);
}