|  |  |  | import 'dart:io'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import 'package:easy_localization/easy_localization.dart'; | 
					
						
							|  |  |  | import 'package:firebase_core/firebase_core.dart'; | 
					
						
							|  |  |  | import 'package:firebase_messaging/firebase_messaging.dart'; | 
					
						
							|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | import 'package:flutter/services.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/core/dependencies.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/routes/app_routes.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/services/logger_service.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/services/navigation_service.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/theme/app_theme.dart'; | 
					
						
							|  |  |  | import 'package:provider/provider.dart'; | 
					
						
							|  |  |  | import 'package:provider/single_child_widget.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import 'core/utils/size_utils.dart'; | 
					
						
							|  |  |  | import 'firebase_options.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @pragma('vm:entry-point') | 
					
						
							|  |  |  | Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { | 
					
						
							|  |  |  |   await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); | 
					
						
							|  |  |  |   getIt.get<LoggerService>().logInfo("Firebase backgroundMessageHandler Main!!!"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MyHttpOverrides extends HttpOverrides { | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   HttpClient createHttpClient(SecurityContext? context) { | 
					
						
							|  |  |  |     return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Future<void> callInitializations() async { | 
					
						
							|  |  |  |   WidgetsFlutterBinding.ensureInitialized(); | 
					
						
							|  |  |  |   await EasyLocalization.ensureInitialized(); | 
					
						
							|  |  |  |   await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); | 
					
						
							|  |  |  |   AppDependencies.addDependencies(); | 
					
						
							|  |  |  |   SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); | 
					
						
							|  |  |  |   HttpOverrides.global = MyHttpOverrides(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void main() async { | 
					
						
							|  |  |  |   await callInitializations(); | 
					
						
							|  |  |  |   runApp( | 
					
						
							|  |  |  |     EasyLocalization( | 
					
						
							|  |  |  |       supportedLocales: const <Locale>[ | 
					
						
							|  |  |  |         Locale('en', 'US'), | 
					
						
							|  |  |  |         Locale('ar', 'SA'), | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       path: 'assets/langs', | 
					
						
							|  |  |  |       fallbackLocale: Locale('en', 'US'), | 
					
						
							|  |  |  |       child: MultiProvider(providers: <SingleChildWidget>[ | 
					
						
							|  |  |  |         ChangeNotifierProvider<LabViewModel>( | 
					
						
							|  |  |  |           create: (_) => LabViewModel( | 
					
						
							|  |  |  |             labRepo: getIt(), | 
					
						
							|  |  |  |             errorHandlerService: getIt(), | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         ChangeNotifierProvider<RadiologyViewModel>( | 
					
						
							|  |  |  |           create: (_) => RadiologyViewModel( | 
					
						
							|  |  |  |             radiologyRepo: getIt(), | 
					
						
							|  |  |  |             errorHandlerService: getIt(), | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         ChangeNotifierProvider<PrescriptionsViewModel>( | 
					
						
							|  |  |  |           create: (_) => PrescriptionsViewModel( | 
					
						
							|  |  |  |             prescriptionsRepo: getIt(), | 
					
						
							|  |  |  |             errorHandlerService: getIt(), | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         ChangeNotifierProvider<AuthenticationViewModel>( | 
					
						
							|  |  |  |           create: (_) => AuthenticationViewModel( | 
					
						
							|  |  |  |             authenticationRepo: getIt(), | 
					
						
							|  |  |  |             appState: getIt(), | 
					
						
							|  |  |  |             dialogService: getIt(), | 
					
						
							|  |  |  |             errorHandlerService: getIt(), | 
					
						
							|  |  |  |             navigationService: getIt(), | 
					
						
							|  |  |  |             cacheService: getIt(), | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ], child: MyApp()), | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MyApp extends StatelessWidget { | 
					
						
							|  |  |  |   const MyApp({super.key}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     return SafeArea( | 
					
						
							|  |  |  |       top: false, // Set to true if you want to avoid the notch area as well
 | 
					
						
							|  |  |  |       bottom: Platform.isIOS ? false : true, | 
					
						
							|  |  |  |       child: LayoutBuilder( | 
					
						
							|  |  |  |         builder: (context, constraints) { | 
					
						
							|  |  |  |           return Sizer( | 
					
						
							|  |  |  |             builder: (context, orientation, deviceType) { | 
					
						
							|  |  |  |               // SizeConfig().init(constraints, orientation);
 | 
					
						
							|  |  |  |               return MaterialApp( | 
					
						
							|  |  |  |                 title: 'Dr. AlHabib', | 
					
						
							|  |  |  |                 builder: (context, mchild) { | 
					
						
							|  |  |  |                   return MediaQuery( | 
					
						
							|  |  |  |                       data: MediaQuery.of(context).copyWith( | 
					
						
							|  |  |  |                         textScaler: TextScaler.linear(1.0), | 
					
						
							|  |  |  |                       ), | 
					
						
							|  |  |  |                       child: mchild!); | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 showSemanticsDebugger: false, | 
					
						
							|  |  |  |                 debugShowCheckedModeBanner: false, | 
					
						
							|  |  |  |                 localizationsDelegates: context.localizationDelegates, | 
					
						
							|  |  |  |                 supportedLocales: context.supportedLocales, | 
					
						
							|  |  |  |                 locale: context.locale, | 
					
						
							|  |  |  |                 initialRoute: AppRoutes.initialRoute, | 
					
						
							|  |  |  |                 routes: AppRoutes.routes, | 
					
						
							|  |  |  |                 theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"), | 
					
						
							|  |  |  |                 navigatorKey: getIt.get<NavigationService>().navigatorKey, | 
					
						
							|  |  |  |               ); | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |           ); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |