You can upgrade an existing app to go_router gradually, by starting with the home screen and creating a GoRoute for each screen you would like to be deep-linkable.
To upgrade an app that is already using the Navigator for routing, start with a single route for the home screen:
import 'package:go_router/go_router.dart'; final _router = GoRouter( routes: [ GoRoute( path: '/', builder: (context, state) => const HomeScreen(), ), ], ); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp.router( routerConfig: _router, ); } }
GoRouter leverages the Router API to provide backward compatibility with the Navigator, so any calls to Navigator.of(context).push()
or Navigator.of(context).pop()
will continue to work, but these destinations aren't deep-linkable. You can gradually add more routes to the GoRouter configuration.
An app that uses named routes can be migrated to go_router by changing each entry in the map to a GoRoute object and changing any calls to Navigator.of(context).pushNamed
to context.go()
.
For example, if you are starting with an app like this:
MaterialApp( initialRoute: '/details', routes: { '/': (context) => HomeScreen(), '/details': (context) => DetailsScreen(), }, );
Then the GoRouter configuration would look like this:
GoRouter( initialRoute: '/details', routes: [ GoRoute( path: '/', builder: (context, state) => const HomeScreen(), ), GoRoute( path: '/details', builder: (context, state) => const DetailsScreen(), ), ], );