From 44ba6ab099a38cdf2174cee07a3aec49e5896fca Mon Sep 17 00:00:00 2001 From: Wilson Wilson Date: Fri, 18 Jun 2021 19:34:03 +0100 Subject: [PATCH] Added null check before NavigationRail.onDestinationSelected is called (#78032) --- .../flutter/lib/src/material/navigation_rail.dart | 3 ++- .../test/material/navigation_rail_test.dart | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/material/navigation_rail.dart b/packages/flutter/lib/src/material/navigation_rail.dart index 61e4e8c7c8..2c34bab2a2 100644 --- a/packages/flutter/lib/src/material/navigation_rail.dart +++ b/packages/flutter/lib/src/material/navigation_rail.dart @@ -498,7 +498,8 @@ class _NavigationRailState extends State with TickerProviderStat labelTextStyle: widget.selectedIndex == i ? selectedLabelTextStyle : unselectedLabelTextStyle, padding: widget.destinations[i].padding, onTap: () { - widget.onDestinationSelected!(i); + if (widget.onDestinationSelected != null) + widget.onDestinationSelected!(i); }, indexLabel: localizations.tabLabel( tabIndex: i + 1, diff --git a/packages/flutter/test/material/navigation_rail_test.dart b/packages/flutter/test/material/navigation_rail_test.dart index 1ac1438648..2eb79d234d 100644 --- a/packages/flutter/test/material/navigation_rail_test.dart +++ b/packages/flutter/test/material/navigation_rail_test.dart @@ -1918,6 +1918,21 @@ void main() { expect(selectedIndex, 2); }); + testWidgets('onDestinationSelected is not called if null', (WidgetTester tester) async { + const int selectedIndex = 0; + await _pumpNavigationRail( + tester, + navigationRail: NavigationRail( + selectedIndex: selectedIndex, + destinations: _destinations(), + labelType: NavigationRailLabelType.all, + ), + ); + + await tester.tap(find.text('Def')); + expect(selectedIndex, 0); + }); + testWidgets('Changing destinations animate when [labelType]=selected', (WidgetTester tester) async { int selectedIndex = 0;