barcode_scanner/lib/router/go_secure_router_builder.dart
mandreshope 9435907c28 feat: Adds session management and reception detail view
Updates the sign-in API endpoint to `/simpos/v1/sign_in`.
Captures the `set-cookie` header from successful sign-in responses and stores it as a `sessionId`.
Persists the session ID using secure storage and includes it in subsequent API requests via the `Cookie` header for improved session management.
Extends the `AuthModel` to include the new `sessionId` field.

Enables navigation from the reception list to a new reception details page, passing the selected reception's ID.
Refactors the `StockPickingCard` into a dedicated component and adds loading indicators to the reception list.
2025-07-29 13:45:24 +03:00

123 lines
3.4 KiB
Dart

import 'package:barcode_scanner/pages/login/login_page_model.dart';
import 'package:barcode_scanner/provider_container.dart';
import 'package:barcode_scanner/router/go_router_builder.dart';
import 'package:barcode_scanner/pages/pages.dart';
import 'package:barcode_scanner/router/router.dart';
import 'package:flutter/material.dart';
export 'package:go_router/go_router.dart';
part 'go_secure_router_builder.g.dart';
final appSecureRoutes = $appRoutes;
// Groupe des routes sécurisées
@TypedGoRoute<SecureRoute>(
path: '/SecurePage',
routes: [
TypedGoRoute<ScannerRoute>(path: 'ScannerPage'),
TypedGoRoute<ProductFormRoute>(path: 'ProductFormPage'),
TypedGoRoute<ProductListRoute>(path: 'ProductListPage'),
TypedGoRoute<ProfileRoute>(path: 'ProfilePage'),
TypedGoRoute<ReceptionRoute>(path: 'ReceptionPage'),
TypedGoRoute<DeliveryRoute>(path: 'DeliveryPage'),
TypedGoRoute<InventoryRoute>(path: 'InventoryPage'),
TypedGoRoute<ReceptionDetailsRoute>(path: 'ReceptionDetailsPage'),
],
)
class SecureRoute extends GoRouteData with _$SecureRoute {
const SecureRoute();
@override
Widget build(BuildContext context, GoRouterState state) => SizedBox();
/// Logique de redirection pour sécuriser les sous-routes
@override
String? redirect(BuildContext context, GoRouterState state) {
final authState = providerContainer
.read(loginPageModelProvider)
.status
.isLogged;
if (!authState) return SplashRoute().location;
return null;
}
}
class ScannerRoute extends GoRouteData with _$ScannerRoute {
const ScannerRoute();
@override
Widget build(BuildContext context, GoRouterState state) => ScannerPage();
}
class ProductFormRoute extends GoRouteData with _$ProductFormRoute {
const ProductFormRoute({required this.id});
final int id;
@override
Widget build(BuildContext context, GoRouterState state) =>
ProductFormPage(id: id);
}
class ProductListRoute extends GoRouteData with _$ProductListRoute {
const ProductListRoute();
@override
Widget build(BuildContext context, GoRouterState state) => ProductListPage();
}
class ProfileRoute extends GoRouteData with _$ProfileRoute {
const ProfileRoute();
@override
Widget build(BuildContext context, GoRouterState state) => ProfilePage();
}
class ReceptionRoute extends GoRouteData with _$ReceptionRoute {
const ReceptionRoute();
@override
CustomTransitionPage<void> buildPage(
BuildContext context,
GoRouterState state,
) => buildPageWithDefaultTransition(
context: context,
state: state,
child: ReceptionPage(),
);
}
class DeliveryRoute extends GoRouteData with _$DeliveryRoute {
const DeliveryRoute();
@override
CustomTransitionPage<void> buildPage(
BuildContext context,
GoRouterState state,
) => buildPageWithDefaultTransition(
context: context,
state: state,
child: DeliveryPage(),
);
}
class InventoryRoute extends GoRouteData with _$InventoryRoute {
const InventoryRoute();
@override
CustomTransitionPage<void> buildPage(
BuildContext context,
GoRouterState state,
) => buildPageWithDefaultTransition(
context: context,
state: state,
child: InventoryPage(),
);
}
class ReceptionDetailsRoute extends GoRouteData with _$ReceptionDetailsRoute {
const ReceptionDetailsRoute({required this.receptionId});
final int receptionId;
@override
Widget build(BuildContext context, GoRouterState state) =>
ReceptionDetailsPage(receptionId: receptionId);
}