diff --git a/examples/api/lib/cupertino/route/show_cupertino_dialog.0.dart b/examples/api/lib/cupertino/route/show_cupertino_dialog.0.dart index 1f68bcd645dd8..a846728260b53 100644 --- a/examples/api/lib/cupertino/route/show_cupertino_dialog.0.dart +++ b/examples/api/lib/cupertino/route/show_cupertino_dialog.0.dart @@ -41,6 +41,7 @@ class CupertinoDialogExample extends StatelessWidget { ); } + @pragma('vm:entry-point') static Route _dialogBuilder( BuildContext context, Object? arguments) { return CupertinoDialogRoute( diff --git a/examples/api/lib/cupertino/route/show_cupertino_modal_popup.0.dart b/examples/api/lib/cupertino/route/show_cupertino_modal_popup.0.dart index 3f263122df1e4..60cd006d72195 100644 --- a/examples/api/lib/cupertino/route/show_cupertino_modal_popup.0.dart +++ b/examples/api/lib/cupertino/route/show_cupertino_modal_popup.0.dart @@ -41,6 +41,7 @@ class ModalPopupExample extends StatelessWidget { ); } + @pragma('vm:entry-point') static Route _modalBuilder(BuildContext context, Object? arguments) { return CupertinoModalPopupRoute( builder: (BuildContext context) { diff --git a/examples/api/lib/material/date_picker/show_date_picker.0.dart b/examples/api/lib/material/date_picker/show_date_picker.0.dart index 2fdb4970e759a..ab2cdc305b9ca 100644 --- a/examples/api/lib/material/date_picker/show_date_picker.0.dart +++ b/examples/api/lib/material/date_picker/show_date_picker.0.dart @@ -53,6 +53,7 @@ class _MyStatefulWidgetState extends State }, ); + @pragma('vm:entry-point') static Route _datePickerRoute( BuildContext context, Object? arguments, diff --git a/examples/api/lib/material/date_picker/show_date_range_picker.0.dart b/examples/api/lib/material/date_picker/show_date_range_picker.0.dart index f7cfa9c0dbc94..ef4b6d4d01f87 100644 --- a/examples/api/lib/material/date_picker/show_date_range_picker.0.dart +++ b/examples/api/lib/material/date_picker/show_date_range_picker.0.dart @@ -74,6 +74,7 @@ class _MyStatefulWidgetState extends State _restorableDateRangePickerRouteFuture, 'date_picker_route_future'); } + @pragma('vm:entry-point') static Route _dateRangePickerRoute( BuildContext context, Object? arguments, diff --git a/examples/api/lib/material/dialog/show_dialog.2.dart b/examples/api/lib/material/dialog/show_dialog.2.dart index b68bdbb00b673..3cb875507ec97 100644 --- a/examples/api/lib/material/dialog/show_dialog.2.dart +++ b/examples/api/lib/material/dialog/show_dialog.2.dart @@ -38,6 +38,7 @@ class DialogExample extends StatelessWidget { ); } + @pragma('vm:entry-point') static Route _dialogBuilder( BuildContext context, Object? arguments) { return DialogRoute( diff --git a/examples/api/lib/widgets/navigator/navigator.restorable_push.0.dart b/examples/api/lib/widgets/navigator/navigator.restorable_push.0.dart index 6d440037570ae..f44ff6efd726c 100644 --- a/examples/api/lib/widgets/navigator/navigator.restorable_push.0.dart +++ b/examples/api/lib/widgets/navigator/navigator.restorable_push.0.dart @@ -30,6 +30,7 @@ class MyStatefulWidget extends StatefulWidget { } class _MyStatefulWidgetState extends State { + @pragma('vm:entry-point') static Route _myRouteBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) => const MyStatefulWidget(), diff --git a/examples/api/lib/widgets/navigator/navigator.restorable_push_and_remove_until.0.dart b/examples/api/lib/widgets/navigator/navigator.restorable_push_and_remove_until.0.dart index c66393a5fe6f6..3e7c7551be3c7 100644 --- a/examples/api/lib/widgets/navigator/navigator.restorable_push_and_remove_until.0.dart +++ b/examples/api/lib/widgets/navigator/navigator.restorable_push_and_remove_until.0.dart @@ -30,6 +30,7 @@ class MyStatefulWidget extends StatefulWidget { } class _MyStatefulWidgetState extends State { + @pragma('vm:entry-point') static Route _myRouteBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) => const MyStatefulWidget(), diff --git a/examples/api/lib/widgets/navigator/navigator.restorable_push_replacement.0.dart b/examples/api/lib/widgets/navigator/navigator.restorable_push_replacement.0.dart index 7a6cccde4d42f..a210aefa721f6 100644 --- a/examples/api/lib/widgets/navigator/navigator.restorable_push_replacement.0.dart +++ b/examples/api/lib/widgets/navigator/navigator.restorable_push_replacement.0.dart @@ -30,6 +30,7 @@ class MyStatefulWidget extends StatefulWidget { } class _MyStatefulWidgetState extends State { + @pragma('vm:entry-point') static Route _myRouteBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) => const MyStatefulWidget(), diff --git a/examples/api/lib/widgets/navigator/navigator_state.restorable_push.0.dart b/examples/api/lib/widgets/navigator/navigator_state.restorable_push.0.dart index dcb2126f7c27e..3305144028479 100644 --- a/examples/api/lib/widgets/navigator/navigator_state.restorable_push.0.dart +++ b/examples/api/lib/widgets/navigator/navigator_state.restorable_push.0.dart @@ -30,6 +30,7 @@ class MyStatefulWidget extends StatefulWidget { } class _MyStatefulWidgetState extends State { + @pragma('vm:entry-point') static Route _myRouteBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) => const MyStatefulWidget(), diff --git a/examples/api/lib/widgets/navigator/navigator_state.restorable_push_and_remove_until.0.dart b/examples/api/lib/widgets/navigator/navigator_state.restorable_push_and_remove_until.0.dart index d95104b41520f..7634cee902430 100644 --- a/examples/api/lib/widgets/navigator/navigator_state.restorable_push_and_remove_until.0.dart +++ b/examples/api/lib/widgets/navigator/navigator_state.restorable_push_and_remove_until.0.dart @@ -30,6 +30,7 @@ class MyStatefulWidget extends StatefulWidget { } class _MyStatefulWidgetState extends State { + @pragma('vm:entry-point') static Route _myRouteBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) => const MyStatefulWidget(), diff --git a/examples/api/lib/widgets/navigator/navigator_state.restorable_push_replacement.0.dart b/examples/api/lib/widgets/navigator/navigator_state.restorable_push_replacement.0.dart index cd98e500a71ee..15827da47b902 100644 --- a/examples/api/lib/widgets/navigator/navigator_state.restorable_push_replacement.0.dart +++ b/examples/api/lib/widgets/navigator/navigator_state.restorable_push_replacement.0.dart @@ -30,6 +30,7 @@ class MyStatefulWidget extends StatefulWidget { } class _MyStatefulWidgetState extends State { + @pragma('vm:entry-point') static Route _myRouteBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) => const MyStatefulWidget(), diff --git a/examples/api/lib/widgets/navigator/restorable_route_future.0.dart b/examples/api/lib/widgets/navigator/restorable_route_future.0.dart index 34d6b457ff5c4..7318bfbb89ab9 100644 --- a/examples/api/lib/widgets/navigator/restorable_route_future.0.dart +++ b/examples/api/lib/widgets/navigator/restorable_route_future.0.dart @@ -73,6 +73,7 @@ class _MyHomeState extends State with RestorationMixin { // A static `RestorableRouteBuilder` that can re-create the route during // state restoration. + @pragma('vm:entry-point') static Route _counterRouteBuilder( BuildContext context, Object? arguments) { return MaterialPageRoute( diff --git a/examples/api/lib/widgets/routes/show_general_dialog.0.dart b/examples/api/lib/widgets/routes/show_general_dialog.0.dart index fd735ddf0abe6..33073c8e73a7c 100644 --- a/examples/api/lib/widgets/routes/show_general_dialog.0.dart +++ b/examples/api/lib/widgets/routes/show_general_dialog.0.dart @@ -38,6 +38,7 @@ class GeneralDialogExample extends StatelessWidget { ); } + @pragma('vm:entry-point') static Route _dialogBuilder( BuildContext context, Object? arguments) { return RawDialogRoute( diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart index a17382045f580..f8c5d591f4dfe 100644 --- a/packages/flutter/lib/src/widgets/navigator.dart +++ b/packages/flutter/lib/src/widgets/navigator.dart @@ -55,8 +55,9 @@ typedef RouteListFactory = List> Function(NavigatorState navigato /// /// Used by the restorable methods of the [Navigator] that add anonymous routes /// (e.g. [NavigatorState.restorablePush]). For this use case, the -/// [RestorableRouteBuilder] must be static function as the [Navigator] will -/// call it again during state restoration to re-create the route. +/// [RestorableRouteBuilder] must be static function annotated with +/// `@pragma('vm:entry-point')`. The [Navigator] will call it again during +/// state restoration to re-create the route. typedef RestorableRouteBuilder = Route Function(BuildContext context, Object? arguments); /// Signature for the [Navigator.popUntil] predicate argument. @@ -2108,9 +2109,10 @@ class Navigator extends StatefulWidget { /// {@macro flutter.widgets.navigator.push} /// /// {@template flutter.widgets.Navigator.restorablePush} - /// The method takes a _static_ [RestorableRouteBuilder] as argument, which - /// must instantiate and return a new [Route] object that will be added to - /// the navigator. The provided `arguments` object is passed to the + /// The method takes a [RestorableRouteBuilder] as argument, which must be a + /// _static_ function annotated with `@pragma('vm:entry-point')`. It must + /// instantiate and return a new [Route] object that will be added to the + /// navigator. The provided `arguments` object is passed to the /// `routeBuilder`. The navigator calls the static `routeBuilder` function /// again during state restoration to re-create the route object. /// diff --git a/packages/flutter/test/cupertino/dialog_test.dart b/packages/flutter/test/cupertino/dialog_test.dart index 441e4465aecbb..1231a6e0b7bd6 100644 --- a/packages/flutter/test/cupertino/dialog_test.dart +++ b/packages/flutter/test/cupertino/dialog_test.dart @@ -1566,6 +1566,7 @@ Widget createAppWithCenteredButton(Widget child) { class _RestorableDialogTestWidget extends StatelessWidget { const _RestorableDialogTestWidget(); + @pragma('vm:entry-point') static Route _dialogBuilder(BuildContext context, Object? arguments) { return CupertinoDialogRoute( context: context, diff --git a/packages/flutter/test/cupertino/route_test.dart b/packages/flutter/test/cupertino/route_test.dart index d01a99e825c7f..5122ee9f61cb8 100644 --- a/packages/flutter/test/cupertino/route_test.dart +++ b/packages/flutter/test/cupertino/route_test.dart @@ -2314,6 +2314,7 @@ class _TestPostRouteCancelState extends State<_TestPostRouteCancel> { class _RestorableModalTestWidget extends StatelessWidget { const _RestorableModalTestWidget(); + @pragma('vm:entry-point') static Route _modalBuilder(BuildContext context, Object? arguments) { return CupertinoModalPopupRoute( builder: (BuildContext context) { diff --git a/packages/flutter/test/material/date_picker_test.dart b/packages/flutter/test/material/date_picker_test.dart index 1f49edb3a026d..648080cfad3a1 100644 --- a/packages/flutter/test/material/date_picker_test.dart +++ b/packages/flutter/test/material/date_picker_test.dart @@ -1412,6 +1412,7 @@ class _RestorableDatePickerDialogTestWidgetState extends State<_RestorableDatePi } } + @pragma('vm:entry-point') static Route _datePickerRoute( BuildContext context, Object? arguments, diff --git a/packages/flutter/test/material/date_range_picker_test.dart b/packages/flutter/test/material/date_range_picker_test.dart index ea844cacede53..e434329f2fa2f 100644 --- a/packages/flutter/test/material/date_range_picker_test.dart +++ b/packages/flutter/test/material/date_range_picker_test.dart @@ -1150,6 +1150,7 @@ class _RestorableDateRangePickerDialogTestWidgetState extends State<_RestorableD } } + @pragma('vm:entry-point') static Route _dateRangePickerRoute( BuildContext context, Object? arguments, diff --git a/packages/flutter/test/material/dialog_test.dart b/packages/flutter/test/material/dialog_test.dart index 2f72e18c5d3c2..fc9949989cb75 100644 --- a/packages/flutter/test/material/dialog_test.dart +++ b/packages/flutter/test/material/dialog_test.dart @@ -2710,6 +2710,7 @@ void main() { class _RestorableDialogTestWidget extends StatelessWidget { const _RestorableDialogTestWidget(); + @pragma('vm:entry-point') static Route _materialDialogBuilder(BuildContext context, Object? arguments) { return DialogRoute( context: context, diff --git a/packages/flutter/test/material/time_picker_test.dart b/packages/flutter/test/material/time_picker_test.dart index a957881f662b8..630ab51cd2096 100644 --- a/packages/flutter/test/material/time_picker_test.dart +++ b/packages/flutter/test/material/time_picker_test.dart @@ -1628,6 +1628,7 @@ class _TimePickerLauncherState extends State<_TimePickerLauncher> with Restorati }, ); + @pragma('vm:entry-point') static Route _timePickerRoute( BuildContext context, Object? arguments, diff --git a/packages/flutter/test/widgets/navigator_restoration_test.dart b/packages/flutter/test/widgets/navigator_restoration_test.dart index 41d8087d4e5ac..0096ef8110576 100644 --- a/packages/flutter/test/widgets/navigator_restoration_test.dart +++ b/packages/flutter/test/widgets/navigator_restoration_test.dart @@ -1015,6 +1015,7 @@ void main() { }); } +@pragma('vm:entry-point') Route _routeBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) { @@ -1025,6 +1026,7 @@ Route _routeBuilder(BuildContext context, Object? arguments) { ); } +@pragma('vm:entry-point') Route _routeFutureBuilder(BuildContext context, Object? arguments) { return MaterialPageRoute( builder: (BuildContext context) { diff --git a/packages/flutter/test/widgets/routes_test.dart b/packages/flutter/test/widgets/routes_test.dart index 3d96cb607e072..fff423ba925c4 100644 --- a/packages/flutter/test/widgets/routes_test.dart +++ b/packages/flutter/test/widgets/routes_test.dart @@ -2153,6 +2153,7 @@ class WidgetWithNoLocalHistoryState extends State { class _RestorableDialogTestWidget extends StatelessWidget { const _RestorableDialogTestWidget(); + @pragma('vm:entry-point') static Route _dialogBuilder(BuildContext context, Object? arguments) { return RawDialogRoute( pageBuilder: (