-
Notifications
You must be signed in to change notification settings - Fork 3
Navigation
The project uses auto_route as the navigation solution. It is based on Flutter's Navigator 2.0 and provides the following feature:
- Declarative routing
- Route guards
- Nested navigation
- Similar API compared to Flutter's Navigator 1.0, including as passing argument and result
See NavigationService and RootAutoRouter classes for more details.
final isUserVerified = await _navigationService.push<bool>(const UserVerificationViewRoute());For example, you want to pass userId to UserVerificationView.
Updating a route to receive parameter
Add the parameter userId to the constructor of the view.
@RoutePage()
class UserVerificationView extends StatelessWidget {
const UserVerificationView({String? userId}) : super(key: const Key(UserVerificationViewRoute.name));
}Run build_runner and UserVerificationViewRoute will have an optional parameter named userId. It will generate as well UserVerificationViewRouteArgs class that will be used to pass the parameter.
Updating the view model to receive the parameter
Implement Initializable interface in your view model and provide the type of the parameter you want to receive. In this case, since we are navigating to UserVerificationView, we will implement Initializable<UserVerificationViewRouteArgs>.
@injectable
class UserVerificationViewModel implements Initializable<UserVerificationViewRouteArgs> {
String? userId;
@override
Future<void> onInitialize(UserVerificationViewRouteArgs? args) async {
userId = args?.userId;
}
}Passing the parameter
You can pass the parameter when navigating to the route.
final isUserVerified = await navigation.push<bool>(const UserVerificationViewRoute(userId: 'asda-123-asd'));Pop current route and return true to previous route.
await _navigationService.pop(true);💡 IMPORTANT
- When passing a parameter, be sure that you are passing the correct type, or else you will encounter
TypeErrorduring runtime when navigating. - When adding a parameter to the view, be sure that it should either be nullable or have a default value.
Route guards are used to prevent navigation to a route based on certain conditions. To implement route guards using the auto_route package, read it here.