Files
sf-app-platform/apps/mobile_app/lib/navigation/app_router.dart

571 lines
20 KiB
Dart
Raw Normal View History

import 'package:account/account.dart';
import 'package:activity/activity.dart';
2025-11-17 00:15:31 +01:00
import 'package:auth/auth.dart';
2026-03-06 00:44:12 +01:00
import 'package:legacy_auth/legacy_auth.dart';
import 'package:customer_service/customer_service.dart';
2025-11-17 00:15:31 +01:00
import 'package:dashboard_shell/dashboard_builder.dart';
2026-03-05 15:42:34 +01:00
import 'package:device_management/device_management.dart';
import 'package:control_panel/control_panel.dart';
import 'package:legacy_dashboard_shell/legacy_dashboard_builder.dart';
import 'package:location/location.dart';
2025-11-17 00:15:31 +01:00
import 'package:flutter/material.dart';
2025-12-03 13:42:14 +01:00
import 'package:get_it/get_it.dart';
2025-11-17 00:15:31 +01:00
import 'package:go_router/go_router.dart';
import 'package:home/home.dart';
import 'package:navigation/navigation.dart';
import 'package:notifications/notifications.dart';
import 'package:payments/payments.dart';
2025-11-17 00:15:31 +01:00
import 'package:profile/profile.dart';
2026-03-12 17:40:06 +01:00
import 'package:settings/settings.dart';
import 'package:sf_app_platform/core/config/app_mode.dart';
import 'package:sf_app_platform/widgets/user_identity_listener.dart';
import 'package:splash/splash.dart';
2025-11-17 00:15:31 +01:00
final GlobalKey<NavigatorState> rootNavigatorKey = GlobalKey<NavigatorState>();
final _legacyControlPanelNavKey =
GlobalKey<NavigatorState>(debugLabel: 'legacyControlPanel');
final _legacyDeviceMgmtNavKey =
GlobalKey<NavigatorState>(debugLabel: 'legacyDeviceMgmt');
final _legacyLocationNavKey =
GlobalKey<NavigatorState>(debugLabel: 'legacyLocation');
final _legacyChatNavKey = GlobalKey<NavigatorState>(debugLabel: 'legacyChat');
final _legacySettingsNavKey =
GlobalKey<NavigatorState>(debugLabel: 'legacySettings');
final _dashboardHomeNavKey =
GlobalKey<NavigatorState>(debugLabel: 'dashboardHome');
final _dashboardActivityNavKey =
GlobalKey<NavigatorState>(debugLabel: 'dashboardActivity');
final _dashboardNotificationsNavKey =
GlobalKey<NavigatorState>(debugLabel: 'dashboardNotifications');
final _dashboardProfileNavKey =
GlobalKey<NavigatorState>(debugLabel: 'dashboardProfile');
2025-11-17 00:15:31 +01:00
late final GoRouter appRouter;
/// Maps the splash's session check result to the destination route based
/// on the active [appMode]. Set `--dart-define=APP_MODE=payment` (or use
/// the `(Payment)` launch configurations) to boot into the payment app.
const _legacySplashRouteMap = <InitialRoute, String>{
InitialRoute.onboarding: AppRoutes.legacyOnboarding,
InitialRoute.login: AppRoutes.legacyLogin,
InitialRoute.home: AppRoutes.controlPanel,
InitialRoute.deviceSetup: AppRoutes.legacyDeviceSetup,
};
const _paymentSplashRouteMap = <InitialRoute, String>{
InitialRoute.onboarding: AppRoutes.onboarding,
InitialRoute.login: AppRoutes.login,
InitialRoute.home: AppRoutes.dashboardHome,
InitialRoute.deviceSetup: AppRoutes.deviceSetup,
};
2025-11-17 00:15:31 +01:00
void configureAppRouter() {
final splashRouteMap = isPaymentMode
? _paymentSplashRouteMap
: _legacySplashRouteMap;
2025-11-17 00:15:31 +01:00
appRouter = GoRouter(
navigatorKey: rootNavigatorKey,
initialLocation: AppRoutes.splash,
2025-12-03 13:42:14 +01:00
debugLogDiagnostics: true,
2025-11-17 00:15:31 +01:00
routes: [
GoRoute(
path: AppRoutes.splash,
name: 'splash',
pageBuilder: SplashBuilder(routeMap: splashRouteMap).buildPage,
),
StatefulShellRoute.indexedStack(
builder: (context, state, navShell) {
return UserIdentityListener(
child: LegacyDashboardBuilder().build(context, navShell),
);
},
branches: [
StatefulShellBranch(
navigatorKey: _legacyControlPanelNavKey,
routes: [
GoRoute(
2026-03-05 15:42:34 +01:00
path: AppRoutes.controlPanel,
name: 'control_panel',
pageBuilder: const ControlPanelBuilder().buildPage,
routes: [
GoRoute(
path: 'customer_service',
name: 'customer_service',
pageBuilder: CustomerServiceBuilder().buildPage,
),
GoRoute(
path: 'notifications',
name: 'legacy_notifications',
pageBuilder: const DeviceNotificationsBuilder().buildPage,
),
2026-03-05 15:42:34 +01:00
GoRoute(
path: 'account_settings',
name: 'account_settings',
pageBuilder: AccountSettingsBuilder().buildPage,
routes: [
GoRoute(
path: 'personal_data',
name: 'personal_data',
pageBuilder: PersonalDataBuilder().buildPage,
),
GoRoute(
path: 'change_password',
name: 'change_password',
pageBuilder: ChangePasswordBuilder().buildPage,
),
GoRoute(
path: 'linked_devices',
name: 'linked_devices',
pageBuilder: LinkedDevicesBuilder().buildPage,
),
GoRoute(
path: 'app_users',
name: 'app_users',
pageBuilder: AppUsersBuilder().buildPage,
),
GoRoute(
path: 'delete_account',
name: 'delete_account',
pageBuilder: DeleteAccountBuilder().buildPage,
),
],
),
],
),
],
),
StatefulShellBranch(
navigatorKey: _legacyDeviceMgmtNavKey,
routes: [
GoRoute(
2026-03-05 15:42:34 +01:00
path: AppRoutes.deviceManagement,
name: 'device_management',
pageBuilder: DeviceManagementBuilder().buildPage,
routes: [
GoRoute(
path: 'scheduled_activities',
name: 'scheduled_activities',
pageBuilder: const ScheduledActivitiesBuilder().buildPage,
),
2026-03-05 15:42:34 +01:00
GoRoute(
path: 'contacts',
name: 'contacts',
pageBuilder: const ContactsBuilder().buildPage,
routes: [
GoRoute(
path: 'edit/:contactId',
name: 'edit_contact',
pageBuilder: const EditContactBuilder().buildPage,
),
],
),
GoRoute(
path: 'health',
name: 'health',
pageBuilder: const HealthBuilder().buildPage,
2026-03-05 15:42:34 +01:00
),
GoRoute(
path: 'remote_connection',
name: 'remote_connection',
pageBuilder: RemoteConnectionBuilder().buildPage,
),
GoRoute(
path: 'locate_device',
name: 'locate_device',
pageBuilder: LocateDeviceBuilder().buildPage,
),
2026-03-10 16:08:33 +01:00
GoRoute(
path: 'rewards',
name: 'rewards',
pageBuilder: RewardsBuilder().buildPage,
),
GoRoute(
path: 'activity_meter',
name: 'activity_meter',
pageBuilder: const ActivityMeterBuilder().buildPage,
),
GoRoute(
path: 'apps_use',
name: 'apps_use',
pageBuilder: const AppsUseBuilder().buildPage,
),
GoRoute(
path: 'volume_control',
name: 'volume_control',
pageBuilder: const VolumeControlBuilder().buildPage,
),
GoRoute(
path: 'do_not_disturb',
name: 'do_not_disturb',
pageBuilder: const DoNotDisturbBuilder().buildPage,
),
GoRoute(
path: 'call_history',
name: 'call_history',
pageBuilder: const CallHistoryBuilder().buildPage,
),
2026-03-24 11:25:45 +01:00
GoRoute(
path: 'background_image',
name: 'background_image',
pageBuilder: const BackgroundImageBuilder().buildPage,
),
GoRoute(
path: 'installed_apps',
name: 'installed_apps',
pageBuilder: const InstalledAppsBuilder().buildPage,
routes: [
GoRoute(
path: 'schedules',
name: 'app_usage_schedules',
pageBuilder:
const AppUsageSchedulesBuilder().buildPage,
),
],
),
GoRoute(
path: 'videocall',
name: 'videocall',
pageBuilder: const VideocallBuilder().buildPage,
),
2026-03-05 15:42:34 +01:00
],
),
],
),
StatefulShellBranch(
navigatorKey: _legacyLocationNavKey,
routes: [
GoRoute(
path: AppRoutes.legacyLocation,
name: 'legacy_location',
pageBuilder: const LocationBuilder().buildPage,
),
],
),
// TODO: Añadir branch para Chat (tab 4)
StatefulShellBranch(
navigatorKey: _legacyChatNavKey,
routes: [
GoRoute(
path: '${AppRoutes.legacyDashboard}/chat',
name: 'legacy_chat',
pageBuilder: (context, state) => MaterialPage<void>(
key: state.pageKey,
child: const Scaffold(
body: Center(child: Text('Chat - Coming soon')),
),
),
),
],
),
2026-03-12 17:40:06 +01:00
StatefulShellBranch(
navigatorKey: _legacySettingsNavKey,
2026-03-12 17:40:06 +01:00
routes: [
GoRoute(
path: AppRoutes.settings,
name: 'settings',
pageBuilder: SettingsBuilder().buildPage,
routes: [
GoRoute(
path: 'appearance',
name: 'appearance',
pageBuilder: AppearanceBuilder().buildPage,
),
2026-03-12 17:40:06 +01:00
GoRoute(
path: 'alarm',
2026-03-12 17:40:06 +01:00
name: 'alarm',
pageBuilder: AlarmBuilder().buildPage,
),
GoRoute(
path: 'remote_management',
name: 'remote_management',
pageBuilder: RemoteManagementBuilder().buildPage,
),
GoRoute(
path: 'sos_agenda',
name: 'sos_agenda',
pageBuilder: SosContactsBuilder().buildPage,
),
GoRoute(
path: 'sound',
name: 'sound',
pageBuilder: SoundBuilder().buildPage,
),
GoRoute(
path: 'sync_clock',
name: 'sync_clock',
pageBuilder: SyncClockBuilder().buildPage,
),
GoRoute(
path: 'app_store',
2026-03-12 17:40:06 +01:00
name: 'app_store',
pageBuilder: AppStoreBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'battery',
2026-03-12 17:40:06 +01:00
name: 'battery',
pageBuilder: BatteryBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'block_phone',
2026-03-12 17:40:06 +01:00
name: 'block_phone',
pageBuilder: BlockPhoneBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'disable_functions',
2026-03-12 17:40:06 +01:00
name: 'disable_functions',
pageBuilder: DisableFunctionsBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'language',
2026-03-12 17:40:06 +01:00
name: 'language',
pageBuilder: LanguageBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'remote_on_off',
2026-03-12 17:40:06 +01:00
name: 'remote_on_off',
pageBuilder: RemoteOnOffBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'alerts',
name: 'alerts',
pageBuilder: AlertsBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'timezone',
2026-03-12 17:40:06 +01:00
name: 'timezone',
pageBuilder: TimezoneBuilder().buildPage,
2026-03-12 17:40:06 +01:00
),
GoRoute(
path: 'wifi_settings',
2026-03-12 17:40:06 +01:00
name: 'wifi_settings',
pageBuilder: WifiSettingsBuilder().buildPage,
),
2026-03-12 17:40:06 +01:00
],
),
],
),
],
2026-01-23 14:52:08 +01:00
),
2026-03-12 17:40:06 +01:00
2025-11-17 00:15:31 +01:00
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.login,
2025-11-17 00:15:31 +01:00
name: 'login',
pageBuilder: LoginBuilder().buildPage,
),
GoRoute(
path: AppRoutes.scaTreezor,
name: 'sca_treezor',
pageBuilder: SCATreezorBuilder().buildPage,
),
GoRoute(
path: AppRoutes.signup,
name: 'signup',
pageBuilder: SignupBuilder().buildPage,
),
2025-11-17 00:15:31 +01:00
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.onboarding,
2025-11-17 00:15:31 +01:00
name: 'onboarding',
pageBuilder: OnboardingBuilder().buildPage,
),
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.linkPhone,
name: 'request_link_phone',
pageBuilder: RequestLinkPhoneBuilder().buildPage,
2025-11-17 00:15:31 +01:00
),
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.phoneCode,
name: 'Verify_link_phone_code',
pageBuilder: VerifyLinkPhoneCodeBuilder().buildPage,
2025-11-17 00:15:31 +01:00
),
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.recoverPassword,
2025-11-17 00:15:31 +01:00
name: 'recover_password',
pageBuilder: RequestRecoveryBuilder().buildPage,
2025-11-17 00:15:31 +01:00
),
GoRoute(
path: AppRoutes.deviceSetup,
name: 'device_setup',
pageBuilder: DeviceSetupBuilder().buildPage,
),
2026-03-06 00:44:12 +01:00
GoRoute(
path: AppRoutes.legacyLogin,
name: 'legacy_login',
pageBuilder: LegacyLoginBuilder().buildPage,
),
GoRoute(
path: AppRoutes.legacySignup,
name: 'legacy_signup',
pageBuilder: LegacySignupBuilder().buildPage,
),
GoRoute(
path: AppRoutes.legacyOnboarding,
name: 'legacy_onboarding',
pageBuilder: LegacyOnboardingBuilder().buildPage,
),
GoRoute(
path: AppRoutes.legacyLinkPhone,
name: 'legacy_request_link_phone',
pageBuilder: LegacyRequestLinkPhoneBuilder().buildPage,
),
GoRoute(
path: AppRoutes.legacyPhoneCode,
name: 'legacy_verify_link_phone_code',
pageBuilder: LegacyVerifyLinkPhoneCodeBuilder().buildPage,
),
GoRoute(
path: AppRoutes.legacyRecoverPassword,
name: 'legacy_recover_password',
pageBuilder: LegacyRequestRecoveryBuilder().buildPage,
),
GoRoute(
path: AppRoutes.legacyDeviceSetup,
name: 'legacy_device_setup',
pageBuilder: LegacyDeviceSetupBuilder().buildPage,
),
GoRoute(
path: AppRoutes.hipayWebView,
name: 'hipay_webview',
pageBuilder: const HiPayWebViewBuilder().buildPage,
),
2025-11-17 00:15:31 +01:00
StatefulShellRoute.indexedStack(
builder: (context, state, navShell) {
return UserIdentityListener(
child: DashboardBuilder().build(context, navShell),
);
2025-11-17 00:15:31 +01:00
},
branches: [
StatefulShellBranch(
navigatorKey: _dashboardHomeNavKey,
2025-11-17 00:15:31 +01:00
routes: [
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.dashboardHome,
2025-11-17 00:15:31 +01:00
name: 'home',
pageBuilder: const HomeBuilder().buildPage,
routes: [
GoRoute(
path: 'child-wallet/:childWalletId',
name: 'home_child_wallet',
pageBuilder: const ChildWalletBuilder().buildPage,
routes: [
GoRoute(
path: 'allowance',
name: 'home_allowance',
pageBuilder: const AllowanceBuilder().buildPage,
),
GoRoute(
path: 'deposit',
name: 'home_deposit',
pageBuilder: const DepositBuilder().buildPage,
),
GoRoute(
path: 'lock-card',
name: 'home_lock_card',
pageBuilder: const LockCardBuilder().buildPage,
),
GoRoute(
path: 'limits',
name: 'home_limits',
pageBuilder: const LimitsBuilder().buildPage,
),
GoRoute(
path: 'goals',
name: 'home_goals',
pageBuilder: const GoalsBuilder().buildPage,
),
GoRoute(
path: 'extract',
name: 'home_extract',
pageBuilder: const ExtractBuilder().buildPage,
),
GoRoute(
path: 'edit',
name: 'home_edit_child_profile',
pageBuilder: const EditChildProfileBuilder().buildPage,
),
GoRoute(
path: 'set-pin',
name: 'home_set_card_pin',
pageBuilder: const SetCardPinBuilder().buildPage,
),
GoRoute(
path: 'change-pin',
name: 'home_change_card_pin',
pageBuilder: const ChangeCardPinBuilder().buildPage,
),
2026-03-24 20:20:54 +01:00
GoRoute(
path: 'renew-card',
name: 'home_renew_card',
pageBuilder: const RenewCardBuilder().buildPage,
2026-03-24 20:20:54 +01:00
),
],
),
],
2025-11-17 00:15:31 +01:00
),
],
),
StatefulShellBranch(
navigatorKey: _dashboardActivityNavKey,
2025-11-17 00:15:31 +01:00
routes: [
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.dashboardActivity,
2025-11-17 00:15:31 +01:00
name: 'activity',
pageBuilder: const ActivityBuilder().buildPage,
),
],
),
StatefulShellBranch(
navigatorKey: _dashboardNotificationsNavKey,
2025-11-17 00:15:31 +01:00
routes: [
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.dashboardNotifications,
2025-11-17 00:15:31 +01:00
name: 'notifications',
pageBuilder: const NotificationsBuilder().buildPage,
),
],
),
StatefulShellBranch(
navigatorKey: _dashboardProfileNavKey,
2025-11-17 00:15:31 +01:00
routes: [
GoRoute(
2025-12-03 13:42:14 +01:00
path: AppRoutes.dashboardProfile,
2025-11-17 00:15:31 +01:00
name: 'profile',
pageBuilder: const ProfileBuilder().buildPage,
routes: [
GoRoute(
path: 'payout',
name: 'profile_payout',
pageBuilder: const PayoutBuilder().buildPage,
),
GoRoute(
path: 'settings',
name: 'profile_settings',
pageBuilder: const ProfileSettingsBuilder().buildPage,
routes: [
GoRoute(
path: 'edit-personal-data',
name: 'profile_edit_personal_data',
pageBuilder: const EditPersonalDataBuilder().buildPage,
),
GoRoute(
path: 'payment-methods',
name: 'profile_payment_methods',
pageBuilder: const PaymentMethodsBuilder().buildPage,
),
],
),
],
2025-11-17 00:15:31 +01:00
),
],
),
],
),
],
);
GetIt.I<NavigationContract>().setRouter(appRouter);
}