Routing
Simple URL based routing.
WARNING
Routing works in web, but it doesn't have full support yet.
Basic routing
To enable routing, you should define routerRootConfiguration. It needs some route definitions.
var routes = [
RouteDefinition(
'/not-found',
(context, arguments) => const NotFoundScreen(),
),
RouteDefinition(
'/',
(context, arguments) => const HomeScreen(),
),
];
void main() {
App.create(
appProviders: [
routerRootConfiguration: RouterRootConfiguration(
routeDefinitions: routes,
),
).run();
}
Route parameters
Normally you need parametrize routes. For example, you may need to get post id from the route.
RouteDefinition(
'/post/:post',
(context, parameters) => const PostScreen(parameters['post']),
),
Route parameters are always start by colon :. Parameters are collected in the parameters map, where keys are parameter names.
Regular expression parameters
In case you need a fine tune match, you can define a regular expression for your parameters.
RouteDefinition(
'/post/:post(\d+)',
(context, parameters) => const PostScreen(parameters['post']),
),
Expressions are encased within parentheses () following the parameter name.
Navigate to a new route
On a build context you can get the RouterState and then push a new route.
Router.of(context).push('/post/5');
Navigate back
The easiest way to navigate back is to call the pop method.
Router.of(context).pop();
Also, the router listens to Navigator pop events so that actions like press the back button works successful.
Remove a route
Previous routes can be removed.
Router.of(context).remove('/post/5');
Restoration
The router is restored automatically. Just make sure restorationScopeId is set in your MaterialApp/CupertinoApp /WidgetsApp.
Next features
- Nested routers
- Middlewares
- Full web support