import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import '../../features/assets/presentation/assets_page.dart'; import '../../features/auth/presentation/delete_account_page.dart'; import '../../features/auth/presentation/login_page.dart'; import '../../features/debug/presentation/debug_info_page.dart'; import '../../features/debug/presentation/debug_page.dart'; import '../../features/debug/presentation/debug_shorebird_page.dart'; import '../../features/debug/presentation/fancy_dio_inspector_page.dart'; import '../../features/debug/presentation/typography_test_page.dart'; import '../../features/market/presentation/market_page.dart'; import '../../features/news/presentation/news_page.dart'; import '../../features/profile/presentation/profile_page.dart'; import '../../features/settings/presentation/settings_page.dart'; import '../../features/settings/presentation/privacy_consent_page.dart'; import '../services/device_header_service.dart'; import 'tab_shell.dart'; abstract final class AppRoutes { static const assets = '/assets'; static const market = '/market'; static const news = '/news'; static const profile = '/profile'; static const login = '/login'; static const settings = '/settings'; static const deleteAccount = '/delete-account'; static const deleteAccountCompleted = '/delete-account-completed'; static const debug = '/debug'; static const debugInfo = '/debug/info'; static const debugShorebird = '/debug/shorebird'; static const debugTypography = '/debug/typography'; static const fancyDioInspector = '/debug/fancy_dio_inspector'; static const privacyConsent = '/privacy-consent'; } final routerProvider = Provider((ref) { final startupListenable = ValueNotifier(0); return GoRouter( initialLocation: AppRoutes.assets, refreshListenable: startupListenable, redirect: (context, state) { final loc = state.matchedLocation; final onConsent = loc == AppRoutes.privacyConsent; final showStartup = DeviceHeaderService.to.privacyConsentRequired || DeviceHeaderService.to.iosStartupRequired; if (showStartup) { if (!onConsent) return AppRoutes.privacyConsent; } else if (onConsent) { return AppRoutes.assets; } return null; }, routes: [ ShellRoute( builder: (context, state, child) => TabShell(location: state.matchedLocation, child: child), routes: [ GoRoute( path: AppRoutes.assets, builder: (ctx, s) => const AssetsPage(), ), GoRoute( path: AppRoutes.market, builder: (ctx, s) => const MarketPage(), ), GoRoute(path: AppRoutes.news, builder: (ctx, s) => const NewsPage()), GoRoute( path: AppRoutes.profile, builder: (ctx, s) => const ProfilePage(), ), ], ), GoRoute(path: AppRoutes.debug, builder: (_, s) => const DebugPage()), GoRoute( path: AppRoutes.login, builder: (_, s) => LoginPage(next: s.uri.queryParameters['next']), ), GoRoute( path: AppRoutes.settings, builder: (_, s) => const SettingsPage(), ), GoRoute( path: AppRoutes.deleteAccount, builder: (_, s) => const DeleteAccountPage(), ), GoRoute( path: AppRoutes.deleteAccountCompleted, builder: (_, s) => const DeleteAccountSuccessPage(), ), GoRoute( path: AppRoutes.debugInfo, builder: (_, s) => const DebugInfoPage(), ), GoRoute( path: AppRoutes.debugShorebird, builder: (_, s) => const DebugShorebirdPage(), ), GoRoute( path: AppRoutes.debugTypography, builder: (_, s) => const TypographyTestPage(), ), GoRoute( path: AppRoutes.fancyDioInspector, builder: (_, s) => const FancyDioInspectorPage(), ), GoRoute( path: AppRoutes.privacyConsent, builder: (_, s) => const PrivacyConsentPage(), ), ], ); });