I'm building a large application that will need a deep links, I choose GoRouter to implement the routing system but found all the examples and tutorials about deep links very simple none of them describe a routing system of large application. I want to create a few GoRouter instances for example:
static GoRouter onBoardingRouter(AuthState authState) => GoRouter(
initialLocation: "/logIn",
navigatorKey: onBoardingNavigatorKey,
routes: [
GoRoute(
name: "login",
path: "/logIn",
builder: (context, state) => const LoginPage(),
//Example of redirection
redirect: (context, state) => authState == AuthState.loading ? "/splash" : null,
),
GoRoute(
name: "splash",
path: "/splash",
builder: (context, state) => const SplashPage(),
),
GoRoute(
name: "signUp",
path: "/signUp",
builder: (context, state) => const SignUpPage(),
),
GoRoute(
name: "passwordReset",
path: "/passwordReset",
builder: (context, state) => const ResetPasswordPage(),
),
],
);
static GoRouter mainRouter = GoRouter(
initialLocation: "/main",
routes: [
ShellRoute(
navigatorKey: mainNavigatorKey,
builder: (context, state, child) {
return Cookies(
child: HomeCorePage(
child: child,
),
);
},
routes: [
GoRoute(
name: "main",
path: "/main",
builder: (context, state) => const HomePage(),
routes: [
GoRoute(
name: "postDetails",
path: "postDetails",
builder: (context, state) =>
PostDetailsPage(postId: state.params['id'] ?? ""),
),
GoRoute(
name: "chat",
path: "chat",
builder: (context, state) => ChatPage(),
),
//...........
],
),
],
),
ShellRoute(
navigatorKey: mainNavigatorKey,
builder: (context, state, child) {
return Cookies(
child: SettingsCorePage(
child: child,
),
);
},
routes: [
GoRoute(
name: "settings",
path: "/settings",
builder: (context, state) => const HomePage(),
routes: [
GoRoute(
name: "profileEdit",
path: "profile",
builder: (context, state) => const EditProfilePage(),
routes: [
GoRoute(
name: "resetPassword",
path: "resetPassword",
builder: (context, state) => const ResetPasswordPage(),
),
],
),
GoRoute(
name: "themeSetup",
path: "theme",
builder: (context, state) => const ResetPasswordPage(),
),
//...........
],
),
],
),
],
);
But I don't understand how to switch between the 2 GoRouters
In MaterialApp.router I can set only 1 GoRouter and the:
context.go(path)
can recognize only routes belong to the one sets on the MaterialApp.router.. What is the way to switch between routers instance?
Thanks!