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функция. Кроме того, я еще не придумал, как изменить цвет всей строки при наведении, но это для вас хотя бы начало. Если кто-нибудь знает, как изменить цвет всех строк, то этот код можно улучшить.

Другие вопросы по тегам