feat: implement child route management for client and staff modules; enhance routing structure for better navigation

This commit is contained in:
Achintha Isuru
2026-02-04 17:13:55 -05:00
parent bb09925668
commit fa6fa90bb8
10 changed files with 55 additions and 16 deletions

View File

@@ -10,6 +10,14 @@
class ClientPaths { class ClientPaths {
ClientPaths._(); ClientPaths._();
// ==========================================================================
// CHILD ROUTE MANAGEMENT
// ==========================================================================
/// Generate child route based on the given route and parent route
///
/// This is useful for creating nested routes within modules.
static String childRoute(String parent, String child) => child.replaceFirst(parent, '');
// ========================================================================== // ==========================================================================
// AUTHENTICATION // AUTHENTICATION
// ========================================================================== // ==========================================================================

View File

@@ -10,6 +10,14 @@
class StaffPaths { class StaffPaths {
StaffPaths._(); StaffPaths._();
// ==========================================================================
// CHILD ROUTE MANAGEMENT
// ==========================================================================
/// Generate child route based on the given route and parent route
///
/// This is useful for creating nested routes within modules.
static String childRoute(String parent, String child) => child.replaceFirst(parent, '');
// ========================================================================== // ==========================================================================
// AUTHENTICATION // AUTHENTICATION
// ========================================================================== // ==========================================================================

View File

@@ -1,4 +1,5 @@
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart';
import 'data/repositories_impl/billing_repository_impl.dart'; import 'data/repositories_impl/billing_repository_impl.dart';
@@ -47,6 +48,6 @@ class BillingModule extends Module {
@override @override
void routes(RouteManager r) { void routes(RouteManager r) {
r.child('/', child: (_) => const BillingPage()); r.child(ClientPaths.childRoute(ClientPaths.billing, ClientPaths.billing), child: (_) => const BillingPage());
} }
} }

View File

@@ -1,4 +1,5 @@
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart';
import 'data/repositories_impl/coverage_repository_impl.dart'; import 'data/repositories_impl/coverage_repository_impl.dart';
import 'domain/repositories/coverage_repository.dart'; import 'domain/repositories/coverage_repository.dart';
@@ -31,6 +32,7 @@ class CoverageModule extends Module {
@override @override
void routes(RouteManager r) { void routes(RouteManager r) {
r.child('/', child: (_) => const CoveragePage()); r.child(ClientPaths.childRoute(ClientPaths.coverage, ClientPaths.coverage),
child: (_) => const CoveragePage());
} }
} }

View File

@@ -3,6 +3,7 @@ import 'package:client_home/client_home.dart';
import 'package:client_coverage/client_coverage.dart'; import 'package:client_coverage/client_coverage.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart';
import 'package:view_orders/view_orders.dart'; import 'package:view_orders/view_orders.dart';
import 'presentation/blocs/client_main_cubit.dart'; import 'presentation/blocs/client_main_cubit.dart';
@@ -21,12 +22,24 @@ class ClientMainModule extends Module {
'/', '/',
child: (BuildContext context) => const ClientMainPage(), child: (BuildContext context) => const ClientMainPage(),
children: <ParallelRoute<dynamic>>[ children: <ParallelRoute<dynamic>>[
ModuleRoute<dynamic>('/home', module: ClientHomeModule()), ModuleRoute<dynamic>(
ModuleRoute<dynamic>('/coverage', module: CoverageModule()), ClientPaths.childRoute(ClientPaths.main, ClientPaths.home),
ModuleRoute<dynamic>('/billing', module: BillingModule()), module: ClientHomeModule(),
ModuleRoute<dynamic>('/orders', module: ViewOrdersModule()), ),
ModuleRoute<dynamic>(
ClientPaths.childRoute(ClientPaths.main, ClientPaths.coverage),
module: CoverageModule(),
),
ModuleRoute<dynamic>(
ClientPaths.childRoute(ClientPaths.main, ClientPaths.billing),
module: BillingModule(),
),
ModuleRoute<dynamic>(
ClientPaths.childRoute(ClientPaths.main, ClientPaths.orders),
module: ViewOrdersModule(),
),
ChildRoute<dynamic>( ChildRoute<dynamic>(
'/reports', ClientPaths.childRoute(ClientPaths.main, ClientPaths.reports),
child: (BuildContext context) => child: (BuildContext context) =>
const PlaceholderPage(title: 'Reports'), const PlaceholderPage(title: 'Reports'),
), ),

View File

@@ -21,7 +21,7 @@ class ClientMainCubit extends Cubit<ClientMainState> implements Disposable {
newIndex = 1; newIndex = 1;
} else if (path.contains(ClientPaths.home)) { } else if (path.contains(ClientPaths.home)) {
newIndex = 2; newIndex = 2;
} else if (path.contains(ClientPaths.viewOrders)) { } else if (path.contains(ClientPaths.orders)) {
newIndex = 3; newIndex = 3;
} else if (path.contains(ClientPaths.reports)) { } else if (path.contains(ClientPaths.reports)) {
newIndex = 4; newIndex = 4;
@@ -46,7 +46,7 @@ class ClientMainCubit extends Cubit<ClientMainState> implements Disposable {
Modular.to.navigate(ClientPaths.home); Modular.to.navigate(ClientPaths.home);
break; break;
case 3: case 3:
Modular.to.navigate(ClientPaths.viewOrders); Modular.to.navigate(ClientPaths.orders);
break; break;
case 4: case 4:
Modular.to.navigate(ClientPaths.reports); Modular.to.navigate(ClientPaths.reports);

View File

@@ -59,19 +59,19 @@ class ClientCreateOrderModule extends Module {
child: (BuildContext context) => const ClientCreateOrderPage(), child: (BuildContext context) => const ClientCreateOrderPage(),
); );
r.child( r.child(
ClientPaths.createOrderRapid.replaceFirst(ClientPaths.createOrder, ''), ClientPaths.childRoute(ClientPaths.createOrder, ClientPaths.createOrderRapid),
child: (BuildContext context) => const RapidOrderPage(), child: (BuildContext context) => const RapidOrderPage(),
); );
r.child( r.child(
ClientPaths.createOrderOneTime.replaceFirst(ClientPaths.createOrder, ''), ClientPaths.childRoute(ClientPaths.createOrder, ClientPaths.createOrderOneTime),
child: (BuildContext context) => const OneTimeOrderPage(), child: (BuildContext context) => const OneTimeOrderPage(),
); );
r.child( r.child(
ClientPaths.createOrderRecurring.replaceFirst(ClientPaths.createOrder, ''), ClientPaths.childRoute(ClientPaths.createOrder, ClientPaths.createOrderRecurring),
child: (BuildContext context) => const RecurringOrderPage(), child: (BuildContext context) => const RecurringOrderPage(),
); );
r.child( r.child(
ClientPaths.createOrderPermanent.replaceFirst(ClientPaths.createOrder, ''), ClientPaths.childRoute(ClientPaths.createOrder, ClientPaths.createOrderPermanent),
child: (BuildContext context) => const PermanentOrderPage(), child: (BuildContext context) => const PermanentOrderPage(),
); );
} }

View File

@@ -1,5 +1,7 @@
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart';
import 'src/data/repositories_impl/home_repository_impl.dart'; import 'src/data/repositories_impl/home_repository_impl.dart';
import 'src/domain/repositories/home_repository_interface.dart'; import 'src/domain/repositories/home_repository_interface.dart';
import 'src/domain/usecases/get_dashboard_data_usecase.dart'; import 'src/domain/usecases/get_dashboard_data_usecase.dart';
@@ -45,6 +47,6 @@ class ClientHomeModule extends Module {
@override @override
void routes(RouteManager r) { void routes(RouteManager r) {
r.child('/', child: (_) => const ClientHomePage()); r.child(ClientPaths.childRoute(ClientPaths.home, ClientPaths.home), child: (_) => const ClientHomePage());
} }
} }

View File

@@ -1,6 +1,7 @@
library client_hubs; library client_hubs;
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart'; import 'package:krow_data_connect/krow_data_connect.dart';
import 'package:firebase_auth/firebase_auth.dart' as firebase; import 'package:firebase_auth/firebase_auth.dart' as firebase;
import 'src/data/repositories_impl/hub_repository_impl.dart'; import 'src/data/repositories_impl/hub_repository_impl.dart';
@@ -48,6 +49,6 @@ class ClientHubsModule extends Module {
@override @override
void routes(RouteManager r) { void routes(RouteManager r) {
r.child('/', child: (_) => const ClientHubsPage()); r.child(ClientPaths.childRoute(ClientPaths.hubs, ClientPaths.hubs), child: (_) => const ClientHubsPage());
} }
} }

View File

@@ -1,5 +1,6 @@
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart';
import 'src/data/repositories_impl/settings_repository_impl.dart'; import 'src/data/repositories_impl/settings_repository_impl.dart';
import 'src/domain/repositories/settings_repository_interface.dart'; import 'src/domain/repositories/settings_repository_interface.dart';
import 'src/domain/usecases/sign_out_usecase.dart'; import 'src/domain/usecases/sign_out_usecase.dart';
@@ -26,6 +27,9 @@ class ClientSettingsModule extends Module {
@override @override
void routes(RouteManager r) { void routes(RouteManager r) {
r.child('/', child: (_) => const ClientSettingsPage()); r.child(
ClientPaths.childRoute(ClientPaths.settings, ClientPaths.settings),
child: (_) => const ClientSettingsPage(),
);
} }
} }