import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:descope/descope.dart'; import 'package:go_router/go_router.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:flutter_web_plugins/url_strategy.dart'; import 'features/auth/presentation/login_screen.dart'; import 'features/dashboard/presentation/dashboard_screen.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); usePathUrlStrategy(); // Load Env (Handling error if missing for now) try { await dotenv.load(fileName: ".env"); } catch (e) { debugPrint("Warning: .env file not found."); } // Initialize Descope final projectId = dotenv.env['DESCOPE_PROJECT_ID'] ?? 'your-project-id'; Descope.setup(projectId); // Load saved session if any try { await Descope.sessionManager.loadSession(); } catch (e) { debugPrint("Failed to load session: $e"); } runApp(const ProviderScope(child: BaronSSOApp())); } // Router Configuration final _router = GoRouter( initialLocation: '/', routes: [ GoRoute(path: '/', builder: (context, state) => const LoginScreen()), GoRoute( path: '/verify/:token', builder: (context, state) { final token = state.pathParameters['token']; return LoginScreen(verificationToken: token); }, ), GoRoute( path: '/dashboard', builder: (context, state) => const DashboardScreen(), ), ], redirect: (context, state) { final isLoggedIn = Descope.sessionManager.session?.refreshToken.isExpired == false; final path = state.uri.path; final isLoggingIn = path == '/' || path.startsWith('/verify/'); if (!isLoggedIn && !isLoggingIn) return '/'; if (isLoggedIn && path == '/') return '/dashboard'; return null; }, ); class BaronSSOApp extends StatelessWidget { const BaronSSOApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp.router( title: 'Baron SSO', theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: const Color(0xFF1A1F2C), // Dark Navy/Black base brightness: Brightness.light, ), useMaterial3: true, textTheme: GoogleFonts.interTextTheme(), ), routerConfig: _router, ); } }