From 3335bcbe40b659344a691d1ac2c9581f7e157e1c Mon Sep 17 00:00:00 2001 From: Jacob Moura Date: Mon, 21 Dec 2020 21:19:05 -0300 Subject: [PATCH] Fix navigator 2.0 in Flutter Web (#72207) --- packages/flutter/lib/src/widgets/binding.dart | 2 +- packages/flutter/test/widgets/binding_test.dart | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart index 24d5ded44f..9bb56477dd 100644 --- a/packages/flutter/lib/src/widgets/binding.dart +++ b/packages/flutter/lib/src/widgets/binding.dart @@ -666,7 +666,7 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB await observer.didPushRouteInformation( RouteInformation( location: routeArguments['location'] as String, - state: routeArguments['state'] as Object, + state: routeArguments['state'] as Object?, ) ) ) diff --git a/packages/flutter/test/widgets/binding_test.dart b/packages/flutter/test/widgets/binding_test.dart index 014aa660ae..f50d1fbfb0 100644 --- a/packages/flutter/test/widgets/binding_test.dart +++ b/packages/flutter/test/widgets/binding_test.dart @@ -129,6 +129,23 @@ void main() { WidgetsBinding.instance!.removeObserver(observer); }); + + testWidgets('didPushRouteInformation callback with null state', (WidgetTester tester) async { + final PushRouteInformationObserver observer = PushRouteInformationObserver(); + WidgetsBinding.instance!.addObserver(observer); + + const Map testRouteInformation = { + 'location': 'testRouteName', + 'state': null, + }; + final ByteData message = const JSONMethodCodec().encodeMethodCall( + const MethodCall('pushRouteInformation', testRouteInformation)); + await ServicesBinding.instance!.defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { }); + expect(observer.pushedRouteInformation.location, 'testRouteName'); + expect(observer.pushedRouteInformation.state, null); + WidgetsBinding.instance!.removeObserver(observer); + }); + testWidgets('Application lifecycle affects frame scheduling', (WidgetTester tester) async { final BinaryMessenger defaultBinaryMessenger = ServicesBinding.instance!.defaultBinaryMessenger; ByteData message;