import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:seshat/config/constants.dart'; import 'package:seshat/data/repositories/auth_repository.dart'; import 'package:seshat/routing/routes.dart'; import 'package:seshat/ui/add_page/view_model/add_view_model.dart'; import 'package:seshat/ui/add_page/widgets/add_page.dart'; import 'package:seshat/ui/auth/viewmodel/login_view_model.dart'; import 'package:seshat/ui/auth/widgets/login_page.dart'; import 'package:seshat/ui/bal_page/view_model/bal_view_model.dart'; import 'package:seshat/ui/bal_page/widget/bal_page.dart'; import 'package:seshat/ui/home_page/view_model/home_view_model.dart'; import 'package:seshat/ui/home_page/widgets/home_page.dart'; import 'package:seshat/ui/sell_page/view_model/sell_view_model.dart'; import 'package:seshat/ui/sell_page/widgets/sell_page.dart'; import 'package:seshat/utils/result.dart'; GoRouter router(AuthRepository authRepository) => GoRouter( initialLocation: Routes.add, redirect: (context, state) async { final loggedIn = await context.read().isLoggedIn; final result = await context.read().getRemoteApiVersion(); bool isUpToDate = false; switch (result) { case Ok(): isUpToDate = result.value == apiVersion; break; default: break; } final logginIn = state.matchedLocation == Routes.login; if (!loggedIn || !isUpToDate) { return Routes.login; } if (logginIn) { return Routes.add; } return null; }, refreshListenable: authRepository, routes: [ GoRoute( path: Routes.home, pageBuilder: (context, state) { final viewModel = HomeViewModel(balRepository: context.read()); return NoTransitionPage(child: HomePage(viewModel: viewModel)); }, routes: [ GoRoute( path: Routes.balPage, name: "bal", pageBuilder: (context, state) { final viewModel = BalViewModel( balRepository: context.read(), id: int.tryParse(state.pathParameters["id"] ?? ""), ); return NoTransitionPage(child: BalPage(viewModel: viewModel)); }, ), GoRoute( path: Routes.add, pageBuilder: (context, state) { final viewModel = AddViewModel( ownerRepository: context.read(), bookRepository: context.read(), bookInstanceRepository: context.read(), balRepository: context.read(), ); return NoTransitionPage(child: AddPage(viewModel: viewModel)); }, // routes: [ // GoRoute(path: Routes.addForm), // GoRoute(path: Routes.addOwner), // GoRoute(path: Routes.addPrice), // ], ), GoRoute( path: Routes.sell, pageBuilder: (context, state) { final viewModel = SellViewModel( balRepository: context.read(), bookInstanceRepository: context.read(), bookRepository: context.read(), ownerRepository: context.read(), ); return NoTransitionPage(child: SellPage(viewModel: viewModel)); }, ), GoRoute( path: Routes.login, pageBuilder: (context, state) { final viewModel = LoginViewModel(authRepository: context.read()); return NoTransitionPage(child: LoginPage(viewModel: viewModel)); }, ), ], ), ], );