Как использовать список DataRows в PaginatedDataTable во Flutter?

у меня есть DataTableгде пользователь может динамически добавлять и удалять DataRows. Из-за этого DataTable может стать действительно большим. Чтобы повысить производительность, я хочу использовать PaginatedDataTable. Но этому виджету нужен дополнительный класс для источника данных. Базовый код для этого выглядит так:

      class DataSource extends DataTableSource {

  int _selectedCount = 0;

  @override
  int get rowCount => list.length;

  @override
  bool get isRowCountApproximate => false;

  @override
  int get selectedRowCount => _selectedCount;

  @override
  DataRow getRow(int index) {

    return DataRow.byIndex(
        index: index,
        cells: <DataCell>[
          DataCell(Text('1')),
          DataCell(Text('2')),
          DataCell(Text('3')),
          DataCell(Text('4')),
        ]);
  }
}

В моем старом коде я использовал DataTable, где у меня были все DataRows в списке, и он работал нормально. Вот отрывок из кода со списком:

      class ExerciseTable extends StatefulWidget {

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

class _ExerciseTableState extends State<ExerciseTable> {
  ExerciseDataSource _rowsDataSource;

  List<DataRow> _rowList = [
    DataRow(cells: <DataCell>[
          DataCell(Text('1')),
          DataCell(Text('2')),
          DataCell(Text('3')),
          DataCell(Text('4')),
    ]),
  ];

  void _addRow() {
    _rowList.insert(0,
       DataRow(cells: <DataCell>[
          DataCell(Text('1')),
          DataCell(Text('2')),
          DataCell(Text('3')),
          DataCell(Text('4')),
        ])
    );
  }

  void _removeRow() {
    setState(() {
      _rowList.removeAt(0);
    });
  }

Теперь я хочу использовать тот же список с DataRows для PaginatedDataTable, но как я могу интегрировать список в класс DataSource? Я ценю каждый ответ, было бы здорово, если бы кто-нибудь знал, как это сделать :)

1 ответ

Интеграция PaginatedDataTable в таможенные нужды может немного сбивать с толку, но вы можете передать свой список источников данных в класс DataSource (через конструктор) и в метод getRow, используя индекс, который вы можете перебирать по своим данным.

Примером может быть:

      @Override
DataRow getRow(int index) {
 final currentData = yourDataList[index]
 return DataRow.byIndex(
  index: index,
  cells: <DataCell>[
   DataCell(Text('${currentData.name}'},
  ],
 );
}
Другие вопросы по тегам