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;