flutter PaginatedDataTable цвет строки
Я использую PaginatedDataTable и хочу, чтобы строка была окрашена при выборе.
Я обнаружил, что на простом DataTable:
DataRow(
color: MaterialStateColor.resolveWith(
(Set<MaterialState> states) => states.contains(MaterialState.selected)
? Colors.blue
: Colors.blue[400]),
selected: address.isSelected,
но ничего для PaginatedDataTable ...
Вы можете мне помочь, ребята?
1 ответ
Вы можете либо установитьdataTableTheme
в вашейThemeData
:
dataTableTheme: DataTableThemeData(
dataRowColor: MaterialStateProperty.resolveWith<Color?>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.selected)) {
return Colors.blue;
}
return Colors.transparent;
}),
),
Или вы можете создать собственный класс, расширяющийDataTableSource
:
/// Table data.
class TableData<T> extends DataTableSource {
TableData({
required this.data,
required this.cellsBuilder,
this.onTap,
this.onSelect,
this.isSelected,
});
// Properties.
final List<T> data;
final List<DataCell> Function(T item) cellsBuilder;
final void Function(T item)? onTap;
final void Function(bool selected, T item)? onSelect;
final bool Function(T item)? isSelected;
@override
DataRow getRow(int index) {
final item = data[index];
return DataRow.byIndex(
index: index,
cells: cellsBuilder(item),
color: MaterialStateColor.resolveWith(_getDataRowColor),
selected: isSelected == null ? false : isSelected!(item),
onSelectChanged: isSelected == null
? null
: (bool? selected) => onSelect!(selected ?? false, item),
onLongPress: () => onTap!(item),
);
}
@override
int get rowCount => data.length;
@override
bool get isRowCountApproximate => false;
@override
int get selectedRowCount => 0;
// Define the color of the row.
Color _getDataRowColor(Set<MaterialState> states) {
if (states.contains(MaterialState.selected)) {
return Colors.blue;
}
return Colors.transparent;
}
}
И используйте собственный класс в своемPaginatedDataTable
:
PaginatedDataTable(
columns: tableHeader,
source: TableData<Map<String, dynamic>>(
data: data,
cellsBuilder: _buildCells,
),
);
Вам нужно будет определить свойtableHeader
и ваш_buildCells
функция. Кроме того, я еще не придумал, как изменить цвет всей строки при наведении, но это для вас хотя бы начало. Если кто-нибудь знает, как изменить цвет всех строк, то этот код можно улучшить.