From c05261ddd7c70d55cf772cfecbef1f2305b1372f Mon Sep 17 00:00:00 2001 From: Achintha Isuru Date: Wed, 4 Feb 2026 16:45:16 -0500 Subject: [PATCH] feat: address missing features and bugs identified during Milestone 3 demo; improve localization, error handling, and navigation --- apps/mobile/NEXT_SPRINT_TASKS.md | 2 ++ .../features/client/billing/lib/billing.dart | 1 - .../navigation/billing_navigator.dart | 7 ------ .../src/presentation/pages/billing_page.dart | 3 ++- .../src/presentation/pages/coverage_page.dart | 3 ++- .../presentation/widgets/coverage_header.dart | 3 ++- .../client/client_main/lib/client_main.dart | 1 - .../presentation/blocs/client_main_cubit.dart | 21 +++++++++-------- .../navigation/client_main_navigator.dart | 10 -------- .../client_create_order_navigator.dart | 23 ------------------- .../pages/permanent_order_page.dart | 3 ++- .../pages/recurring_order_page.dart | 3 ++- .../create_order/create_order_view.dart | 12 +++++----- .../one_time_order/one_time_order_view.dart | 5 ++-- .../widgets/rapid_order/rapid_order_view.dart | 5 ++-- .../features/client/home/lib/client_home.dart | 1 - .../widgets/client_home_header.dart | 4 ++-- .../client_home_sheets.dart} | 17 +------------- .../widgets/dashboard_widget_builder.dart | 9 ++++---- .../navigation/client_hubs_navigator.dart | 9 -------- .../presentation/pages/client_hubs_page.dart | 3 ++- .../navigation/client_settings_navigator.dart | 15 ------------ .../settings_actions.dart | 4 ++-- .../settings_profile_header.dart | 3 ++- .../settings_quick_links.dart | 4 ++-- .../navigation/view_orders_navigator.dart | 14 ----------- .../presentation/pages/view_orders_page.dart | 4 ++-- .../widgets/view_orders_header.dart | 4 ++-- 28 files changed, 55 insertions(+), 138 deletions(-) delete mode 100644 apps/mobile/packages/features/client/billing/lib/src/presentation/navigation/billing_navigator.dart delete mode 100644 apps/mobile/packages/features/client/client_main/lib/src/presentation/navigation/client_main_navigator.dart delete mode 100644 apps/mobile/packages/features/client/create_order/lib/src/presentation/navigation/client_create_order_navigator.dart rename apps/mobile/packages/features/client/home/lib/src/presentation/{navigation/client_home_navigator.dart => widgets/client_home_sheets.dart} (68%) delete mode 100644 apps/mobile/packages/features/client/hubs/lib/src/presentation/navigation/client_hubs_navigator.dart delete mode 100644 apps/mobile/packages/features/client/settings/lib/src/presentation/navigation/client_settings_navigator.dart delete mode 100644 apps/mobile/packages/features/client/view_orders/lib/src/presentation/navigation/view_orders_navigator.dart diff --git a/apps/mobile/NEXT_SPRINT_TASKS.md b/apps/mobile/NEXT_SPRINT_TASKS.md index be14e8cc..95f4a3eb 100644 --- a/apps/mobile/NEXT_SPRINT_TASKS.md +++ b/apps/mobile/NEXT_SPRINT_TASKS.md @@ -27,6 +27,8 @@ - fix "dartdepend_on_referenced_packages" warnings. - fix "dartunnecessary_library_name" warnings. - fix lint issues. +- fix localization. +- centralise way to handle errors. - track minimum shift hours in the staff profile and show a warning if they try to apply for shifts that are below their minimum hours. - this need to be added in the BE and also a FE validation (5 hrs). diff --git a/apps/mobile/packages/features/client/billing/lib/billing.dart b/apps/mobile/packages/features/client/billing/lib/billing.dart index a4a659c9..7cecbcbf 100644 --- a/apps/mobile/packages/features/client/billing/lib/billing.dart +++ b/apps/mobile/packages/features/client/billing/lib/billing.dart @@ -1,4 +1,3 @@ library; -export 'src/presentation/navigation/billing_navigator.dart'; export 'src/billing_module.dart'; diff --git a/apps/mobile/packages/features/client/billing/lib/src/presentation/navigation/billing_navigator.dart b/apps/mobile/packages/features/client/billing/lib/src/presentation/navigation/billing_navigator.dart deleted file mode 100644 index a0fee8aa..00000000 --- a/apps/mobile/packages/features/client/billing/lib/src/presentation/navigation/billing_navigator.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:flutter_modular/flutter_modular.dart'; - -/// Extension on [IModularNavigator] to provide typed navigation for the billing feature. -extension BillingNavigator on IModularNavigator { - /// Navigates to the billing page. - void pushBilling() => pushNamed('/billing/'); -} diff --git a/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart b/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart index bc522cb9..ee690605 100644 --- a/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart +++ b/apps/mobile/packages/features/client/billing/lib/src/presentation/pages/billing_page.dart @@ -3,6 +3,7 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import '../blocs/billing_bloc.dart'; import '../blocs/billing_event.dart'; @@ -83,7 +84,7 @@ class _BillingViewState extends State { leading: Center( child: UiIconButton.secondary( icon: UiIcons.arrowLeft, - onTap: () => Modular.to.navigate('/client-main/home/'), + onTap: () => Modular.to.toClientHome() ), ), title: AnimatedSwitcher( diff --git a/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/pages/coverage_page.dart b/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/pages/coverage_page.dart index 52f5388f..9e081c29 100644 --- a/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/pages/coverage_page.dart +++ b/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/pages/coverage_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:intl/intl.dart'; +import 'package:krow_core/core.dart'; import '../blocs/coverage_bloc.dart'; import '../blocs/coverage_event.dart'; import '../blocs/coverage_state.dart'; @@ -68,7 +69,7 @@ class _CoveragePageState extends State { expandedHeight: 300.0, backgroundColor: UiColors.primary, leading: IconButton( - onPressed: () => Modular.to.navigate('/client-main/home/'), + onPressed: () => Modular.to.toClientHome(), icon: Container( padding: const EdgeInsets.all(UiConstants.space2), decoration: BoxDecoration( diff --git a/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/widgets/coverage_header.dart b/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/widgets/coverage_header.dart index f346e8fd..fa61c16f 100644 --- a/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/widgets/coverage_header.dart +++ b/apps/mobile/packages/features/client/client_coverage/lib/src/presentation/widgets/coverage_header.dart @@ -1,6 +1,7 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import 'coverage_calendar_selector.dart'; /// Header widget for the coverage page. @@ -67,7 +68,7 @@ class CoverageHeader extends StatelessWidget { Row( children: [ GestureDetector( - onTap: () => Modular.to.navigate('/client-main/home/'), + onTap: () => Modular.to.toClientHome(), child: Container( width: UiConstants.space10, height: UiConstants.space10, diff --git a/apps/mobile/packages/features/client/client_main/lib/client_main.dart b/apps/mobile/packages/features/client/client_main/lib/client_main.dart index 3cf2c937..667579a7 100644 --- a/apps/mobile/packages/features/client/client_main/lib/client_main.dart +++ b/apps/mobile/packages/features/client/client_main/lib/client_main.dart @@ -1,4 +1,3 @@ library; export 'src/client_main_module.dart'; -export 'src/presentation/navigation/client_main_navigator.dart'; diff --git a/apps/mobile/packages/features/client/client_main/lib/src/presentation/blocs/client_main_cubit.dart b/apps/mobile/packages/features/client/client_main/lib/src/presentation/blocs/client_main_cubit.dart index 1d68e240..fb86b725 100644 --- a/apps/mobile/packages/features/client/client_main/lib/src/presentation/blocs/client_main_cubit.dart +++ b/apps/mobile/packages/features/client/client_main/lib/src/presentation/blocs/client_main_cubit.dart @@ -1,5 +1,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import 'client_main_state.dart'; class ClientMainCubit extends Cubit implements Disposable { @@ -14,15 +15,15 @@ class ClientMainCubit extends Cubit implements Disposable { // Detect which tab is active based on the route path // Using contains() to handle child routes and trailing slashes - if (path.contains('/client-main/coverage')) { + if (path.contains(ClientPaths.coverage)) { newIndex = 0; - } else if (path.contains('/client-main/billing')) { + } else if (path.contains(ClientPaths.billing)) { newIndex = 1; - } else if (path.contains('/client-main/home')) { + } else if (path.contains(ClientPaths.home)) { newIndex = 2; - } else if (path.contains('/client-main/orders')) { + } else if (path.contains(ClientPaths.viewOrders)) { newIndex = 3; - } else if (path.contains('/client-main/reports')) { + } else if (path.contains(ClientPaths.reports)) { newIndex = 4; } @@ -36,19 +37,19 @@ class ClientMainCubit extends Cubit implements Disposable { switch (index) { case 0: - Modular.to.navigate('/client-main/coverage'); + Modular.to.navigate(ClientPaths.coverage); break; case 1: - Modular.to.navigate('/client-main/billing'); + Modular.to.navigate(ClientPaths.billing); break; case 2: - Modular.to.navigate('/client-main/home'); + Modular.to.navigate(ClientPaths.home); break; case 3: - Modular.to.navigate('/client-main/orders'); + Modular.to.navigate(ClientPaths.viewOrders); break; case 4: - Modular.to.navigate('/client-main/reports'); + Modular.to.navigate(ClientPaths.reports); break; } // State update will happen via _onRouteChanged diff --git a/apps/mobile/packages/features/client/client_main/lib/src/presentation/navigation/client_main_navigator.dart b/apps/mobile/packages/features/client/client_main/lib/src/presentation/navigation/client_main_navigator.dart deleted file mode 100644 index a0102f90..00000000 --- a/apps/mobile/packages/features/client/client_main/lib/src/presentation/navigation/client_main_navigator.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_modular/flutter_modular.dart'; - -/// Extension to provide typed navigation for the Client Main feature. -extension ClientMainNavigator on IModularNavigator { - /// Navigates to the Client Main Shell (Home). - /// This replaces the current navigation stack. - void navigateClientMain() { - navigate('/client-main/'); - } -} diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/navigation/client_create_order_navigator.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/navigation/client_create_order_navigator.dart deleted file mode 100644 index 4125d94b..00000000 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/navigation/client_create_order_navigator.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter_modular/flutter_modular.dart'; - -extension ClientCreateOrderNavigator on IModularNavigator { - void pushCreateOrder() { - pushNamed('/client/create-order/'); - } - - void pushRapidOrder() { - pushNamed('/client/create-order/rapid'); - } - - void pushOneTimeOrder() { - pushNamed('/client/create-order/one-time'); - } - - void pushRecurringOrder() { - pushNamed('/client/create-order/recurring'); - } - - void pushPermanentOrder() { - pushNamed('/client/create-order/permanent'); - } -} diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/permanent_order_page.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/permanent_order_page.dart index fae4d2d1..b7ee80cc 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/permanent_order_page.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/permanent_order_page.dart @@ -2,6 +2,7 @@ import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; /// Permanent Order Page - Long-term staffing placement. /// Placeholder for future implementation. @@ -18,7 +19,7 @@ class PermanentOrderPage extends StatelessWidget { backgroundColor: UiColors.bgPrimary, appBar: UiAppBar( title: labels.title, - onLeadingPressed: () => Modular.to.navigate('/client/create-order/'), + onLeadingPressed: () => Modular.to.navigate(ClientPaths.createOrder), ), body: Center( child: Padding( diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/recurring_order_page.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/recurring_order_page.dart index 2f15cf70..a9326be7 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/recurring_order_page.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/presentation/pages/recurring_order_page.dart @@ -2,6 +2,7 @@ import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; /// Recurring Order Page - Ongoing weekly/monthly coverage. /// Placeholder for future implementation. @@ -18,7 +19,7 @@ class RecurringOrderPage extends StatelessWidget { backgroundColor: UiColors.bgPrimary, appBar: UiAppBar( title: labels.title, - onLeadingPressed: () => Modular.to.navigate('/client/create-order/'), + onLeadingPressed: () => Modular.to.toClientHome(), ), body: Center( child: Padding( diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/create_order/create_order_view.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/create_order/create_order_view.dart index 290165fc..9aac3907 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/create_order/create_order_view.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/create_order/create_order_view.dart @@ -3,10 +3,10 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import 'package:krow_domain/krow_domain.dart'; import '../../blocs/client_create_order_bloc.dart'; import '../../blocs/client_create_order_state.dart'; -import '../../navigation/client_create_order_navigator.dart'; import '../../ui_entities/order_type_ui_metadata.dart'; import '../order_type_card.dart'; @@ -43,7 +43,7 @@ class CreateOrderView extends StatelessWidget { backgroundColor: UiColors.bgPrimary, appBar: UiAppBar( title: t.client_create_order.title, - onLeadingPressed: () => Modular.to.navigate('/client-main/home/'), + onLeadingPressed: () => Modular.to.toClientHome(), ), body: SafeArea( child: Padding( @@ -98,16 +98,16 @@ class CreateOrderView extends StatelessWidget { onTap: () { switch (type.id) { case 'rapid': - Modular.to.pushRapidOrder(); + Modular.to.toCreateOrderRapid(); break; case 'one-time': - Modular.to.pushOneTimeOrder(); + Modular.to.toCreateOrderOneTime(); break; case 'recurring': - Modular.to.pushRecurringOrder(); + Modular.to.toCreateOrderRecurring(); break; case 'permanent': - Modular.to.pushPermanentOrder(); + Modular.to.toCreateOrderPermanent(); break; } }, diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart index 895c4ce1..95263c57 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/one_time_order/one_time_order_view.dart @@ -3,6 +3,7 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import 'package:krow_domain/krow_domain.dart'; import '../../blocs/one_time_order_bloc.dart'; import '../../blocs/one_time_order_event.dart'; @@ -50,7 +51,7 @@ class OneTimeOrderView extends StatelessWidget { OneTimeOrderHeader( title: labels.title, subtitle: labels.subtitle, - onBack: () => Modular.to.navigate('/client/create-order/'), + onBack: () => Modular.to.navigate(ClientPaths.createOrder), ), Expanded( child: Center( @@ -89,7 +90,7 @@ class OneTimeOrderView extends StatelessWidget { OneTimeOrderHeader( title: labels.title, subtitle: labels.subtitle, - onBack: () => Modular.to.navigate('/client/create-order/'), + onBack: () => Modular.to.navigate(ClientPaths.createOrder), ), Expanded( child: Stack( diff --git a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/rapid_order/rapid_order_view.dart b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/rapid_order/rapid_order_view.dart index 95713729..821399aa 100644 --- a/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/rapid_order/rapid_order_view.dart +++ b/apps/mobile/packages/features/client/create_order/lib/src/presentation/widgets/rapid_order/rapid_order_view.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:intl/intl.dart'; +import 'package:krow_core/core.dart'; import '../../blocs/rapid_order_bloc.dart'; import '../../blocs/rapid_order_event.dart'; import '../../blocs/rapid_order_state.dart'; @@ -28,7 +29,7 @@ class RapidOrderView extends StatelessWidget { title: labels.success_title, message: labels.success_message, buttonLabel: labels.back_to_orders, - onDone: () => Modular.to.navigate('/client-main/orders/'), + onDone: () => Modular.to.navigate(ClientPaths.orders), ); } @@ -82,7 +83,7 @@ class _RapidOrderFormState extends State<_RapidOrderForm> { subtitle: labels.subtitle, date: dateStr, time: timeStr, - onBack: () => Modular.to.navigate('/client/create-order/'), + onBack: () => Modular.to.navigate(ClientPaths.createOrder), ), // Content diff --git a/apps/mobile/packages/features/client/home/lib/client_home.dart b/apps/mobile/packages/features/client/home/lib/client_home.dart index ce9dfa18..94507f8d 100644 --- a/apps/mobile/packages/features/client/home/lib/client_home.dart +++ b/apps/mobile/packages/features/client/home/lib/client_home.dart @@ -9,7 +9,6 @@ import 'src/presentation/blocs/client_home_bloc.dart'; import 'src/presentation/pages/client_home_page.dart'; export 'src/presentation/pages/client_home_page.dart'; -export 'src/presentation/navigation/client_home_navigator.dart'; /// A [Module] for the client home feature. /// diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/client_home_header.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/client_home_header.dart index 12b6a222..39c9af6c 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/client_home_header.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/client_home_header.dart @@ -2,10 +2,10 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import '../blocs/client_home_bloc.dart'; import '../blocs/client_home_event.dart'; import '../blocs/client_home_state.dart'; -import '../navigation/client_home_navigator.dart'; import 'header_icon_button.dart'; /// The header section of the client home page. @@ -95,7 +95,7 @@ class ClientHomeHeader extends StatelessWidget { ), HeaderIconButton( icon: UiIcons.settings, - onTap: () => Modular.to.pushSettings(), + onTap: () => Modular.to.toClientSettings(), ), ], ), diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/navigation/client_home_navigator.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/client_home_sheets.dart similarity index 68% rename from apps/mobile/packages/features/client/home/lib/src/presentation/navigation/client_home_navigator.dart rename to apps/mobile/packages/features/client/home/lib/src/presentation/widgets/client_home_sheets.dart index afb166e3..eaf9984a 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/navigation/client_home_navigator.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/client_home_sheets.dart @@ -1,20 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_modular/flutter_modular.dart'; -import '../widgets/shift_order_form_sheet.dart'; - -extension ClientHomeNavigator on IModularNavigator { - void pushSettings() { - pushNamed('/client-settings/'); - } - - void pushCreateOrder() { - pushNamed('/client/create-order/'); - } - - void pushRapidOrder() { - pushNamed('/client/create-order/rapid'); - } -} +import 'shift_order_form_sheet.dart'; /// Helper class for showing modal sheets in the client home feature. class ClientHomeSheets { diff --git a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/dashboard_widget_builder.dart b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/dashboard_widget_builder.dart index db0e237c..3da413cc 100644 --- a/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/dashboard_widget_builder.dart +++ b/apps/mobile/packages/features/client/home/lib/src/presentation/widgets/dashboard_widget_builder.dart @@ -1,14 +1,15 @@ import 'package:core_localization/core_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import '../blocs/client_home_state.dart'; -import '../navigation/client_home_navigator.dart'; import '../widgets/actions_widget.dart'; import '../widgets/coverage_widget.dart'; import '../widgets/draggable_widget_wrapper.dart'; import '../widgets/live_activity_widget.dart'; import '../widgets/reorder_widget.dart'; import '../widgets/spending_widget.dart'; +import 'client_home_sheets.dart'; /// A widget that builds dashboard content based on widget ID. /// @@ -62,8 +63,8 @@ class DashboardWidgetBuilder extends StatelessWidget { switch (id) { case 'actions': return ActionsWidget( - onRapidPressed: () => Modular.to.pushRapidOrder(), - onCreateOrderPressed: () => Modular.to.pushCreateOrder(), + onRapidPressed: () => Modular.to.toCreateOrderRapid(), + onCreateOrderPressed: () => Modular.to.toCreateOrder(), subtitle: subtitle, ); case 'reorder': @@ -116,7 +117,7 @@ class DashboardWidgetBuilder extends StatelessWidget { ); case 'liveActivity': return LiveActivityWidget( - onViewAllPressed: () => Modular.to.navigate('/client-main/coverage/'), + onViewAllPressed: () => Modular.to.toClientCoverage(), subtitle: subtitle, ); default: diff --git a/apps/mobile/packages/features/client/hubs/lib/src/presentation/navigation/client_hubs_navigator.dart b/apps/mobile/packages/features/client/hubs/lib/src/presentation/navigation/client_hubs_navigator.dart deleted file mode 100644 index 0527cdcb..00000000 --- a/apps/mobile/packages/features/client/hubs/lib/src/presentation/navigation/client_hubs_navigator.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'package:flutter_modular/flutter_modular.dart'; - -/// Extension on [IModularNavigator] to provide typed navigation for client hubs. -extension ClientHubsNavigator on IModularNavigator { - /// Navigates to the client hubs page. - Future pushClientHubs() async { - await pushNamed('/client-hubs/'); - } -} diff --git a/apps/mobile/packages/features/client/hubs/lib/src/presentation/pages/client_hubs_page.dart b/apps/mobile/packages/features/client/hubs/lib/src/presentation/pages/client_hubs_page.dart index aa3de3e2..78751548 100644 --- a/apps/mobile/packages/features/client/hubs/lib/src/presentation/pages/client_hubs_page.dart +++ b/apps/mobile/packages/features/client/hubs/lib/src/presentation/pages/client_hubs_page.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:core_localization/core_localization.dart'; +import 'package:krow_core/core.dart'; import 'package:krow_domain/krow_domain.dart'; import '../blocs/client_hubs_bloc.dart'; import '../blocs/client_hubs_event.dart'; @@ -179,7 +180,7 @@ class ClientHubsPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( - onTap: () => Modular.to.navigate('/client-main/home/'), + onTap: () => Modular.to.toClientHome(), child: Container( width: 40, height: 40, diff --git a/apps/mobile/packages/features/client/settings/lib/src/presentation/navigation/client_settings_navigator.dart b/apps/mobile/packages/features/client/settings/lib/src/presentation/navigation/client_settings_navigator.dart deleted file mode 100644 index fbb7f0da..00000000 --- a/apps/mobile/packages/features/client/settings/lib/src/presentation/navigation/client_settings_navigator.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter_modular/flutter_modular.dart'; - -/// Extension on [IModularNavigator] to provide strongly-typed navigation -/// for the client settings feature. -extension ClientSettingsNavigator on IModularNavigator { - /// Navigates to the client settings page. - void pushClientSettings() { - pushNamed('/client/settings/'); - } - - /// Navigates to the hubs page. - void pushHubs() { - pushNamed('/client-hubs/'); - } -} diff --git a/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_actions.dart b/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_actions.dart index e044d1ec..5f275b01 100644 --- a/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_actions.dart +++ b/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_actions.dart @@ -1,9 +1,9 @@ -import 'package:client_settings/src/presentation/navigation/client_settings_navigator.dart'; import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import '../../blocs/client_settings_bloc.dart'; /// A widget that displays the primary actions for the settings page. @@ -30,7 +30,7 @@ class SettingsActions extends StatelessWidget { // Hubs button UiButton.primary( text: labels.hubs, - onPressed: () => Modular.to.pushHubs(), + onPressed: () => Modular.to.toClientHubs(), ), const SizedBox(height: UiConstants.space4), diff --git a/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_profile_header.dart b/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_profile_header.dart index 5d4deac1..0d2db204 100644 --- a/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_profile_header.dart +++ b/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_profile_header.dart @@ -2,6 +2,7 @@ import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_modular/flutter_modular.dart'; +import 'package:krow_core/core.dart'; import 'package:krow_data_connect/krow_data_connect.dart' as dc; /// A widget that displays the profile header with avatar and company info. @@ -30,7 +31,7 @@ class SettingsProfileHeader extends StatelessWidget { shape: const Border(bottom: BorderSide(color: UiColors.border, width: 1)), leading: IconButton( icon: const Icon(UiIcons.chevronLeft, color: UiColors.textSecondary), - onPressed: () => Modular.to.navigate('/client-main/home/'), + onPressed: () => Modular.to.toClientHome(), ), flexibleSpace: FlexibleSpaceBar( background: Container( diff --git a/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_quick_links.dart b/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_quick_links.dart index ea0bf9cc..e9b0bcae 100644 --- a/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_quick_links.dart +++ b/apps/mobile/packages/features/client/settings/lib/src/presentation/widgets/client_settings_page/settings_quick_links.dart @@ -2,7 +2,7 @@ import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_modular/flutter_modular.dart'; -import '../../navigation/client_settings_navigator.dart'; +import 'package:krow_core/core.dart'; /// A widget that displays a list of quick links in a card. class SettingsQuickLinks extends StatelessWidget { @@ -37,7 +37,7 @@ class SettingsQuickLinks extends StatelessWidget { _QuickLinkItem( icon: UiIcons.nfc, title: labels.clock_in_hubs, - onTap: () => Modular.to.pushHubs(), + onTap: () => Modular.to.toClientHubs(), ), _QuickLinkItem( diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/navigation/view_orders_navigator.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/navigation/view_orders_navigator.dart deleted file mode 100644 index 78575ccf..00000000 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/navigation/view_orders_navigator.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:flutter_modular/flutter_modular.dart'; - -/// Extension to provide typed navigation for the View Orders feature. -extension ViewOrdersNavigator on IModularNavigator { - /// Navigates to the Create Order feature. - void navigateToCreateOrder() { - navigate('/client/create-order/'); - } - - /// Navigates to the Order Details (placeholder for now). - void navigateToOrderDetails(String orderId) { - // pushNamed('/view-orders/$orderId'); - } -} diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart index fd256e8c..5000d680 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/pages/view_orders_page.dart @@ -5,12 +5,12 @@ import 'package:flutter_modular/flutter_modular.dart'; import 'package:intl/intl.dart'; import 'package:core_localization/core_localization.dart'; +import 'package:krow_core/core.dart'; import '../blocs/view_orders_cubit.dart'; import '../blocs/view_orders_state.dart'; import 'package:krow_domain/krow_domain.dart'; import '../widgets/view_order_card.dart'; import '../widgets/view_orders_header.dart'; -import '../navigation/view_orders_navigator.dart'; /// The main page for viewing client orders. /// @@ -191,7 +191,7 @@ class _ViewOrdersViewState extends State { UiButton.primary( text: t.client_view_orders.post_order, leadingIcon: UiIcons.add, - onPressed: () => Modular.to.navigateToCreateOrder(), + onPressed: () => Modular.to.toCreateOrder(), ), ], ), diff --git a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_orders_header.dart b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_orders_header.dart index 45e72f93..2ff56c3f 100644 --- a/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_orders_header.dart +++ b/apps/mobile/packages/features/client/view_orders/lib/src/presentation/widgets/view_orders_header.dart @@ -5,10 +5,10 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:intl/intl.dart'; import 'package:core_localization/core_localization.dart'; +import 'package:krow_core/core.dart'; import 'package:krow_domain/krow_domain.dart'; import '../blocs/view_orders_cubit.dart'; import '../blocs/view_orders_state.dart'; -import '../navigation/view_orders_navigator.dart'; import 'view_orders_filter_tab.dart'; /// The sticky header section for the View Orders page. @@ -69,7 +69,7 @@ class ViewOrdersHeader extends StatelessWidget { UiButton.primary( text: t.client_view_orders.post_button, leadingIcon: UiIcons.add, - onPressed: () => Modular.to.navigateToCreateOrder(), + onPressed: () => Modular.to.toCreateOrder(), size: UiButtonSize.small, style: ElevatedButton.styleFrom( minimumSize: const Size(0, 48),