buildRouter function

GoRouter buildRouter({
  1. required String initialRoute,
  2. required String initialDeeplink,
  3. required bool isLoggedIn,
  4. required INavigationHelpers navigationHelpers,
})

Implementation

GoRouter buildRouter({
  required String initialRoute,
  required String initialDeeplink,
  required bool isLoggedIn,
  required INavigationHelpers navigationHelpers,
}) {
  final builtGoRoutes = buildRoutes();

  return _router.get(
    () => GoRouter(
      observers: [NavObserver()],
      redirectLimit: 10,
      initialLocation: initialRoute.isEmpty ? null : initialRoute,
      redirect: (context, state) {
        final GoRouter router = getObject();
        if (state.name == Screens.otpForm.name &&
            state.uri.queryParameters['phone'] == null) {
          return router.namedLocation(Screens.otpPhone.name);
        }
        final IAuthDataStore authStore = getObject();

        final isLoggedIn = authStore.isLoggedIn();

        if (!_isRoutePublic(state.uri.path)) {
          if (!isLoggedIn) {
            return Screens.otpPhone.forRoot();
          }
        }

        return null;
      },
      errorBuilder: (context, error) {
        return Error404Screen(
          gotoHome: () async {
            final navHelper = getObject<INavigationHelpers>();
            final route = await navHelper.getNextRoute();
            navHelper.navigate(route, eventProps: {
              'cta': 'invalid_route',
            });
          },
        );
      },
      debugLogDiagnostics: verboseLogs,
      routes: builtGoRoutes,
      navigatorKey: navigationHelpers.navigatorKey,
    ),
  );
}