/// ============================================================================== /// SAQEL ENTERPRISE (EDTECH 2.0) - FLUTTER APPLICATION ENTRY POINT /// ============================================================================== /// /// ملف: main.dart /// الهدف المعماري: /// نقطة الدخول الرئيسية لتطبيق الطالب الموحد لمنصة صَقِل. /// يتولى هذا الملف: /// 1. تهيئة بيئة تشغيل فلاتر وتثبيت معايير التصميم العالمي (Cupertino Dark Aesthetic). /// 2. حقن وإدارة كافة الـ BLoC/Cubit Providers (المصادقة، المنهاج، المشغل، لوحة الطالب وولي الأمر). /// 3. التوجيه التلقائي بين شاشة تسجيل الدخول والشاشة الموحدة وفق حالة الجلسة. library; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'core/config/app_config.dart'; import 'core/localization/app_strings.dart'; import 'core/theme/app_theme.dart'; import 'logic/cubits/auth_cubit.dart'; import 'logic/cubits/dashboard_cubits.dart'; import 'logic/cubits/curriculum_cubit.dart'; import 'logic/cubits/video_playback_cubit.dart'; import 'presentation/screens/auth/auth_screen.dart'; import 'presentation/screens/home/unified_home_screen.dart'; /// نقطة انطلاق التطبيق الرئيسية void main() { WidgetsFlutterBinding.ensureInitialized(); runApp(const SaqelAppRoot()); } /// الودجت الجذرية للتطبيق (Root Widget) المحتوية على المزودات وإعدادات الثيم والاتجاه العربي class SaqelAppRoot extends StatefulWidget { const SaqelAppRoot({super.key}); @override State createState() => _SaqelAppRootState(); } class _SaqelAppRootState extends State { final ThemeMode _themeMode = ThemeMode.dark; @override Widget build(BuildContext context) { return MultiBlocProvider( providers: [ BlocProvider( create: (context) => AuthCubit()..checkSession(), ), BlocProvider( create: (context) => StudentCubit(), ), BlocProvider( create: (context) => GuardianCubit(), ), BlocProvider( create: (context) => CurriculumCubit(), ), BlocProvider( create: (context) => VideoPlaybackCubit(), ), ], child: MaterialApp( title: AppConfig.appNameAr, debugShowCheckedModeBanner: false, theme: AppTheme.lightTheme, darkTheme: AppTheme.darkTheme, themeMode: _themeMode, builder: (context, child) { // RTL / LTR Directionality Control return Directionality( textDirection: AppStrings.isArabic ? TextDirection.rtl : TextDirection.ltr, child: child!, ); }, home: const AuthGate(), ), ); } } /// Global Auth Gate: Auto-Directs to Unified Dashboard if Logged In, or AuthScreen class AuthGate extends StatelessWidget { const AuthGate({super.key}); @override Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { if (state is Authenticated) { return UnifiedHomeScreen( user: state.user, activeRole: state.activeRole, ); } else if (state is AuthLoading) { return const Scaffold( body: Center( child: CircularProgressIndicator(), ), ); } // Default to AuthScreen for unauthenticated or OTP states return const AuthScreen(); }, ); } }