Как использовать список 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}'},
],
);
}