diff --git a/patient/lib/main.dart b/patient/lib/main.dart index 741953e..f68b22d 100644 --- a/patient/lib/main.dart +++ b/patient/lib/main.dart @@ -9,67 +9,101 @@ import 'package:patient/presentation/widgets/snackbar_service.dart'; import 'package:patient/provider/appointments_provider.dart'; import 'package:patient/provider/assessment_provider.dart'; import 'package:patient/provider/auth_provider.dart'; -import 'package:patient/repository/supabase_auth_repository.dart'; - import 'package:patient/provider/reports_provider.dart'; +import 'package:patient/provider/task_provider.dart'; +import 'package:patient/provider/therapy_goals_provider.dart'; +import 'package:patient/repository/supabase_auth_repository.dart'; import 'package:patient/repository/supabase_patient_repository.dart'; - import 'package:provider/provider.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); -import 'provider/task_provider.dart'; -import 'provider/therapy_goals_provider.dart'; + try { + // Load environment variables + await dotenv.load(fileName: ".env"); + final supabaseUrl = dotenv.env['SUPABASE_URL']; + final supabaseKey = dotenv.env['SUPABASE_ANON_KEY']; + final geminiKey = dotenv.env['GEMINI_API_KEY']; + // Validate env variables + if (supabaseUrl == null || supabaseKey == null || geminiKey == null) { + throw Exception("Missing environment variables in .env file"); + } -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - await dotenv.load(fileName: ".env"); - await Supabase.initialize( - url: dotenv.env['SUPABASE_URL']!, - anonKey: dotenv.env['SUPABASE_ANON_KEY']!, - ); - Gemini.init(apiKey: dotenv.env['GEMINI_API_KEY']!); // Add your Gemini API key here - SystemChrome.setSystemUIOverlayStyle( - const SystemUiOverlayStyle( - statusBarColor: Colors.white, - statusBarIconBrightness: Brightness.dark, - systemNavigationBarColor: Colors.white, - systemNavigationBarIconBrightness: Brightness.dark, - ), - ); - - setupDependencyInjection(); - - runApp( - MultiProvider( - providers: [ - ChangeNotifierProvider(create: (_) => AssessmentProvider()), - ChangeNotifierProvider( - create: (_) => AuthProvider( - authRepository: SupabaseAuthRepository( - supabaseClient: Supabase.instance.client, + // Initialize Supabase + await Supabase.initialize( + url: supabaseUrl, + anonKey: supabaseKey, + ); + + // Initialize Gemini + Gemini.init(apiKey: geminiKey); + + // System UI styling + SystemChrome.setSystemUIOverlayStyle( + const SystemUiOverlayStyle( + statusBarColor: Colors.white, + statusBarIconBrightness: Brightness.dark, + systemNavigationBarColor: Colors.white, + systemNavigationBarIconBrightness: Brightness.dark, + ), + ); + + // Setup dependency injection + setupDependencyInjection(); + + // Create shared repositories + final supabaseClient = Supabase.instance.client; + final patientRepository = + SupabasePatientRepository(supabaseClient: supabaseClient); + final authRepository = + SupabaseAuthRepository(supabaseClient: supabaseClient); + + runApp( + MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => AssessmentProvider()), + + ChangeNotifierProvider( + create: (_) => AuthProvider( + authRepository: authRepository, ), ), - ), - ChangeNotifierProvider(create: (_) => ReportsProvider( - patientRepository: SupabasePatientRepository(supabaseClient: Supabase.instance.client), - )), - ChangeNotifierProvider(create: (_) => TaskProvider( - patientRepository: SupabasePatientRepository(supabaseClient: Supabase.instance.client), - )), - ChangeNotifierProvider(create: (_) => TherapyGoalsProvider( - patientRepository: SupabasePatientRepository(supabaseClient: Supabase.instance.client), - )), - ChangeNotifierProvider(create: (_) => AppointmentsProvider( - authRepository: SupabaseAuthRepository(supabaseClient: Supabase.instance.client), - patientRepository: SupabasePatientRepository(supabaseClient: Supabase.instance.client) - )) - ], - child: const MyApp(), - ), - ); + + ChangeNotifierProvider( + create: (_) => ReportsProvider( + patientRepository: patientRepository, + ), + ), + + ChangeNotifierProvider( + create: (_) => TaskProvider( + patientRepository: patientRepository, + ), + ), + + ChangeNotifierProvider( + create: (_) => TherapyGoalsProvider( + patientRepository: patientRepository, + ), + ), + + ChangeNotifierProvider( + create: (_) => AppointmentsProvider( + authRepository: authRepository, + patientRepository: patientRepository, + ), + ), + ], + child: const MyApp(), + ), + ); + } catch (e) { + debugPrint("App initialization failed: $e"); + } } class MyApp extends StatelessWidget { @@ -78,10 +112,14 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( - scaffoldMessengerKey: SnackbarService.scaffoldMessengerKey, - debugShowCheckedModeBanner: false, - title: 'Patient App', - theme: AppTheme.lightTheme(), - home: const SplashScreen()); + scaffoldMessengerKey: SnackbarService.scaffoldMessengerKey, + debugShowCheckedModeBanner: false, + title: 'NeuroTrack Patient', + theme: AppTheme.lightTheme(), + initialRoute: '/', + routes: { + '/': (context) => const SplashScreen(), + }, + ); } -} +} \ No newline at end of file