PaginatedDataTable & Firebase - PullRequest
       64

PaginatedDataTable & Firebase

0 голосов
/ 30 апреля 2020

Я просмотрел 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);
  }
...