From 430c57eb3f89d8c85c201dbe795a4fa6f0c7ca4d Mon Sep 17 00:00:00 2001 From: Chinmoy Date: Tue, 20 Apr 2021 23:40:48 +0530 Subject: [PATCH] Modified DataRow to be disabled when onSelectChanged is not set (#80184) This change prevents DataRow from being enabled when onSelectChanged is null. --- .../flutter/lib/src/material/data_table.dart | 4 +-- .../test/material/data_table_test.dart | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/material/data_table.dart b/packages/flutter/lib/src/material/data_table.dart index 9c20486c9c..5e99007201 100644 --- a/packages/flutter/lib/src/material/data_table.dart +++ b/packages/flutter/lib/src/material/data_table.dart @@ -1018,7 +1018,7 @@ class DataTable extends StatelessWidget { tableRows[rowIndex].children![0] = _buildCheckbox( context: context, checked: row.selected, - onRowTap: () => row.onSelectChanged?.call(!row.selected), + onRowTap: row.onSelectChanged == null ? null : () => row.onSelectChanged?.call(!row.selected), onCheckboxChanged: row.onSelectChanged, overlayColor: row.color ?? effectiveDataRowColor, tristate: false, @@ -1084,7 +1084,7 @@ class DataTable extends StatelessWidget { onLongPress: cell.onLongPress, onTapCancel: cell.onTapCancel, onTapDown: cell.onTapDown, - onSelectChanged: () => row.onSelectChanged?.call(!row.selected), + onSelectChanged: row.onSelectChanged == null ? null : () => row.onSelectChanged?.call(!row.selected), overlayColor: row.color ?? effectiveDataRowColor, ); rowIndex += 1; diff --git a/packages/flutter/test/material/data_table_test.dart b/packages/flutter/test/material/data_table_test.dart index 15f8ecdfdc..aadacb1805 100644 --- a/packages/flutter/test/material/data_table_test.dart +++ b/packages/flutter/test/material/data_table_test.dart @@ -1629,4 +1629,39 @@ void main() { _customHorizontalMargin, ); }); + + testWidgets('DataRow is disabled when onSelectChanged is not set', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: DataTable( + columns: const [ + DataColumn(label: Text('Col1')), + DataColumn(label: Text('Col2')), + ], + rows: [ + DataRow(cells: const [ + DataCell(Text('Hello')), + DataCell(Text('world')), + ], + onSelectChanged: (bool? value) {}, + ), + const DataRow(cells: [ + DataCell(Text('Bug')), + DataCell(Text('report')), + ]), + const DataRow(cells: [ + DataCell(Text('GitHub')), + DataCell(Text('issue')), + ]), + ], + ), + ), + ), + ); + + expect(find.widgetWithText(TableRowInkWell, 'Hello'), findsOneWidget); + expect(find.widgetWithText(TableRowInkWell, 'Bug'), findsNothing); + expect(find.widgetWithText(TableRowInkWell, 'GitHub'), findsNothing); + }); }