@Joe__Black

Как передать значение из одного класса в другой во Flutter?

Есть вот такая реализация PaginatedDataTable:

class PaginatedDataTableExample extends StatefulWidget {
  const PaginatedDataTableExample({super.key});

  @override
  _PaginatedDataTableExampleState createState() =>
      _PaginatedDataTableExampleState();
}

class _PaginatedDataTableExampleState extends State<PaginatedDataTableExample> {
  int _rowsPerPage = PaginatedDataTable.defaultRowsPerPage;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: PaginatedDataTable(
          rowsPerPage: _rowsPerPage,
          onRowsPerPageChanged: (newRowsPerPage) {
            setState(() {
              _rowsPerPage = newRowsPerPage!;
            });
          },
          columns: const [
            DataColumn(
              label: Text(
                "id",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            DataColumn(
              label: Text(
                "Begin",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
            DataColumn(
              label: Text(
                "End",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),
          ],
          source: DataTableSourceExample(),
        ),
      ),
    );
  }
}

И DataTableSource для него:

class DataTableSourceExample extends DataTableSource{
  final List<Map<String, dynamic>> data = List.generate(
    999999,
    (index) => {
      "id": index,
      "begin_datetime": DateTime.now(),
      "end_date": DateTime.now(),
    },
  );


  @override
  DataRow? getRow(int index) {
    return DataRow(cells: [
      DataCell(Text(data[index]["id"].toString())),
      DataCell(Text(data[index]["begin_datetime"].toString())),
      DataCell(Text(data[index]["end_date"].toString())),
    ],
    );
  }

  @override
  bool get isRowCountApproximate => false;

  @override
  int get rowCount => data.length;

  @override
  int get selectedRowCount => 0;

}


Но в DataTableSourceExample список заранее создан (просто для теста). В дальнейшем планируется обращаться к стороннему API, в котором записей будет под миллион и больше, не хотелось бы тянуть их все сразу. Поэтому я хочу загружать из API только то количество записей, которые необходимо отобразить на странице.

Поэтому вопрос: как в DataTableSourceExample передать из PaginatedDataTableExample количество строк на странице (я так понимаю, rowsPerPage) и индекс элемента, с которого нужно загружать необходимое количество строк?
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы