barcode_scanner/lib/router/go_secure_router_builder.dart
mandreshope 4682be5b62 feat: Adds operation pages and refactors navigation
Introduces dedicated pages and routes for Delivery and Inventory operations.

Refactors the application drawer to include navigation links for these new operations, ensuring proper route transitions and closing the drawer on tap. Enhances the drawer's active state styling for list and expansion tiles, providing better visual feedback.

Extracts common app bar logic into a reusable `MainAppbarComponent` and integrates it into operation pages, starting with Reception, to standardize the application's header.

Standardizes routing paths for operation pages and ensures consistent page transitions across them.
2025-07-24 11:07:10 +03:00

113 lines
3.1 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'),
],
)
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(),
);
}