This repository has been archived on 2025-08-25. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Seshat/lib/routing/router.dart
2025-08-15 12:51:36 +02:00

102 lines
3.5 KiB
Dart

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<AuthRepository>().isLoggedIn;
final result = await context.read<AuthRepository>().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));
},
),
],
),
],
);