import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:record/record.dart'; import 'core/network/api_repository.dart'; import 'core/notifications/completion_notification_service.dart'; import 'features/audio/presentation/cubit/voice_cubit.dart'; import 'features/chat/presentation/cubit/chat_cubit.dart'; import 'features/chat/presentation/cubit/chat_state.dart'; import 'features/chat/presentation/pages/chat_page.dart'; const _green = Color(0xFF167C68); const _paper = Color(0xFFF6F5F0); const _night = Color(0xFF101A18); Future main() async { WidgetsFlutterBinding.ensureInitialized(); final api = ApiRepository( baseUrl: const String.fromEnvironment( 'API_BASE_URL', defaultValue: 'http://127.0.0.1:8000', ), ); runApp( MultiRepositoryProvider( providers: [RepositoryProvider.value(value: api)], child: MultiBlocProvider( providers: [ BlocProvider(create: (_) => ChatCubit(api)), BlocProvider(create: (_) => VoiceCubit(api, AudioRecorder())), ], child: const SovereignApp(), ), ), ); unawaited(_initializeNotifications()); } Future _initializeNotifications() async { try { await CompletionNotificationService.instance.initialize(); } catch (error, stackTrace) { debugPrint('Notification initialization failed: $error'); debugPrintStack(stackTrace: stackTrace); } } class SovereignApp extends StatelessWidget { const SovereignApp({super.key}); @override Widget build(BuildContext context) => BlocBuilder( builder: (context, state) => MaterialApp( title: 'Mithqal AI', debugShowCheckedModeBanner: false, themeMode: state.isDarkMode ? ThemeMode.dark : ThemeMode.light, theme: ThemeData( useMaterial3: true, scaffoldBackgroundColor: _paper, colorScheme: ColorScheme.fromSeed( seedColor: _green, surface: _paper, ), fontFamily: 'Segoe UI', ), darkTheme: ThemeData( useMaterial3: true, brightness: Brightness.dark, scaffoldBackgroundColor: _night, colorScheme: ColorScheme.fromSeed( seedColor: const Color(0xFF57C6A4), brightness: Brightness.dark, surface: _night, ), fontFamily: 'Segoe UI', ), home: const ChatPage(), ), ); }