import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import '../../features/auth/screens/login_screen.dart'; import '../../features/auth/screens/register_screen.dart'; import '../../features/auth/screens/two_factor_screen.dart'; import '../../features/auth/screens/forgot_password_screen.dart'; import '../../features/auth/screens/reset_password_screen.dart'; import '../../features/dashboard/dashboard_screen.dart'; import '../../features/ideas/screens/idea_list_screen.dart'; import '../../features/ideas/screens/idea_view_screen.dart'; import '../../features/ideas/screens/idea_create_screen.dart'; import '../../features/ideas/screens/idea_edit_screen.dart'; import '../../features/voice/screens/voice_input_screen.dart'; import '../../features/voice/screens/voice_sessions_screen.dart'; import '../../features/workspaces/screens/workspace_list_screen.dart'; import '../../features/workspaces/screens/workspace_detail_screen.dart'; import '../../features/notifications/notifications_screen.dart'; import '../../features/settings/screens/settings_screen.dart'; import '../../features/admin/screens/admin_screen.dart'; import '../../features/onboarding/onboarding_screen.dart'; import '../../widgets/shell.dart'; import '../api/client.dart'; import '../constants/app_constants.dart'; final _storage = FlutterSecureStorage(); final routerProvider = Provider((ref) { final apiClient = ref.read(apiClientProvider); return GoRouter( initialLocation: '/', redirect: (context, state) async { final token = await apiClient.getAccessToken(); final onboardingSeen = await _storage.read(key: AppConstants.onboardingSeenKey); final isAuthRoute = state.matchedLocation.startsWith('/auth') || state.matchedLocation == '/onboarding'; if (token == null && !isAuthRoute) { if (onboardingSeen == null) return '/onboarding'; return '/auth/login'; } if (token != null && isAuthRoute) return '/'; return null; }, routes: [ GoRoute( path: '/onboarding', builder: (_, __) => const OnboardingScreen(), ), GoRoute( path: '/auth/login', builder: (_, __) => const LoginScreen(), ), GoRoute( path: '/auth/register', builder: (_, __) => const RegisterScreen(), ), GoRoute( path: '/auth/2fa', builder: (_, __) => const TwoFactorScreen(), ), GoRoute( path: '/auth/forgot-password', builder: (_, __) => const ForgotPasswordScreen(), ), GoRoute( path: '/auth/reset-password', builder: (_, __) => const ResetPasswordScreen(), ), ShellRoute( builder: (_, __, child) => Shell(child: child), routes: [ GoRoute( path: '/', builder: (_, __) => const DashboardScreen(), ), GoRoute( path: '/ideas', builder: (_, __) => const IdeaListScreen(), ), GoRoute( path: '/ideas/create', builder: (_, __) => const IdeaCreateScreen(), ), GoRoute( path: '/ideas/:id', builder: (_, state) => IdeaViewScreen(id: state.pathParameters['id']!), ), GoRoute( path: '/ideas/:id/edit', builder: (_, state) => IdeaEditScreen(id: state.pathParameters['id']!), ), GoRoute( path: '/voice', builder: (_, __) => const VoiceInputScreen(), ), GoRoute( path: '/voice/sessions', builder: (_, __) => const VoiceSessionsScreen(), ), GoRoute( path: '/workspaces', builder: (_, __) => const WorkspaceListScreen(), ), GoRoute( path: '/workspaces/:id', builder: (_, state) => WorkspaceDetailScreen(id: state.pathParameters['id']!), ), GoRoute( path: '/notifications', builder: (_, __) => const NotificationsScreen(), ), GoRoute( path: '/settings', builder: (_, __) => const SettingsScreen(), ), GoRoute( path: '/admin', builder: (_, __) => const AdminScreen(), ), ], ), ], ); });