diff --git a/packages/flutter/lib/src/material/data_table.dart b/packages/flutter/lib/src/material/data_table.dart index a2b49920357..00a4cdcfa01 100644 --- a/packages/flutter/lib/src/material/data_table.dart +++ b/packages/flutter/lib/src/material/data_table.dart @@ -543,7 +543,7 @@ class DataTable extends StatelessWidget { tableRows[rowIndex].children[0] = _buildCheckbox( color: theme.accentColor, checked: row.selected, - onRowTap: () => row.onSelectChanged(!row.selected), + onRowTap: () => row.onSelectChanged != null ? row.onSelectChanged(!row.selected) : null , onCheckboxChanged: row.onSelectChanged, ); rowIndex += 1; @@ -568,7 +568,7 @@ class DataTable extends StatelessWidget { label: column.label, tooltip: column.tooltip, numeric: column.numeric, - onSort: () => column.onSort(dataColumnIndex, sortColumnIndex == dataColumnIndex ? !sortAscending : true), + onSort: () => column.onSort != null ? column.onSort(dataColumnIndex, sortColumnIndex == dataColumnIndex ? !sortAscending : true) : null, sorted: dataColumnIndex == sortColumnIndex, ascending: sortAscending, ); @@ -583,7 +583,7 @@ class DataTable extends StatelessWidget { placeholder: cell.placeholder, showEditIcon: cell.showEditIcon, onTap: cell.onTap, - onSelectChanged: () => row.onSelectChanged(!row.selected), + onSelectChanged: () => row.onSelectChanged != null ? row.onSelectChanged(!row.selected) : null, ); rowIndex += 1; } diff --git a/packages/flutter/test/material/data_table_test.dart b/packages/flutter/test/material/data_table_test.dart index d05561f6103..9d99a1ec85e 100644 --- a/packages/flutter/test/material/data_table_test.dart +++ b/packages/flutter/test/material/data_table_test.dart @@ -210,4 +210,61 @@ void main() { expect(tester.renderObject(find.byType(Row).first).size.width, lessThan(800.0)); expect(tester.takeException(), isNull); }); + + testWidgets('DataTable column onSort test', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: DataTable( + columns: const [ + DataColumn( + label: Text('Dessert'), + ), + ], + rows: const [ + DataRow( + cells: [ + DataCell( + Text('Lollipop'), // wraps + ), + ], + ), + ], + ), + ), + ), + ); + await tester.tap(find.text('Dessert')); + await tester.pump(); + expect(tester.takeException(), isNull); + }); + + testWidgets('DataTable row onSelectChanged test', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: DataTable( + columns: const [ + DataColumn( + label: Text('Dessert'), + ), + ], + rows: const [ + DataRow( + cells: [ + DataCell( + Text('Lollipop'), // wraps + ), + ], + ), + ], + ), + ), + ), + ); + await tester.tap(find.text('Lollipop')); + await tester.pump(); + expect(tester.takeException(), isNull); + }); + }