You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			190 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			190 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Dart
		
	
| 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/app_state.dart';
 | |
| import 'package:hmg_patient_app_new/core/dependencies.dart';
 | |
| import 'package:hmg_patient_app_new/core/utils/utils.dart';
 | |
| import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/payfort/payfort_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart';
 | |
| import 'package:hmg_patient_app_new/features/profile_settings/profile_settings_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> callAppStateInitializations() async {
 | |
|   final String deviceTypeId = (Platform.isIOS
 | |
|       ? "1"
 | |
|       : await Utils.isGoogleServicesAvailable()
 | |
|           ? "2"
 | |
|           : "3");
 | |
|   AppState appState = getIt.get<AppState>();
 | |
|   appState.setDeviceTypeID = deviceTypeId;
 | |
| }
 | |
| 
 | |
| Future<void> callInitializations() async {
 | |
|   WidgetsFlutterBinding.ensureInitialized();
 | |
|   await EasyLocalization.ensureInitialized();
 | |
|   await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
 | |
|   AppDependencies.addDependencies();
 | |
|   SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
 | |
|   HttpOverrides.global = MyHttpOverrides();
 | |
|   await callAppStateInitializations();
 | |
| }
 | |
| 
 | |
| 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<InsuranceViewModel>(
 | |
|           create: (_) => InsuranceViewModel(
 | |
|             insuranceRepo: getIt(),
 | |
|             errorHandlerService: getIt(),
 | |
|           ),
 | |
|         ),
 | |
|         ChangeNotifierProvider<MedicalFileViewModel>(
 | |
|           create: (_) => MedicalFileViewModel(
 | |
|             medicalFileRepo: getIt(),
 | |
|             errorHandlerService: getIt(),
 | |
|           ),
 | |
|         ),
 | |
|         ChangeNotifierProvider<ProfileSettingsViewModel>(
 | |
|           create: (_) => ProfileSettingsViewModel(),
 | |
|         ),
 | |
|         ChangeNotifierProvider<MyAppointmentsViewModel>(
 | |
|           create: (_) => MyAppointmentsViewModel(
 | |
|             myAppointmentsRepo: getIt(),
 | |
|             errorHandlerService: getIt(),
 | |
|           ),
 | |
|         ),
 | |
|         ChangeNotifierProvider<PayfortViewModel>(
 | |
|           create: (_) => PayfortViewModel(
 | |
|             payfortRepo: getIt(),
 | |
|             errorHandlerService: getIt(),
 | |
|           ),
 | |
|         ),
 | |
|         ChangeNotifierProvider<HabibWalletViewModel>(
 | |
|           create: (_) => HabibWalletViewModel(
 | |
|             habibWalletRepo: getIt(),
 | |
|             errorHandlerService: getIt(),
 | |
|           ),
 | |
|         ),
 | |
|         ChangeNotifierProvider<BookAppointmentsViewModel>(
 | |
|           create: (_) => BookAppointmentsViewModel(
 | |
|             bookAppointmentsRepo: getIt(),
 | |
|             errorHandlerService: getIt(),
 | |
|             navigationService: getIt(),
 | |
|             myAppointmentsViewModel: getIt(),
 | |
|           ),
 | |
|         ),
 | |
|         ChangeNotifierProvider<AuthenticationViewModel>(
 | |
|           create: (_) => AuthenticationViewModel(
 | |
|             authenticationRepo: getIt(),
 | |
|             appState: getIt(),
 | |
|             dialogService: getIt(),
 | |
|             errorHandlerService: getIt(),
 | |
|             navigationService: getIt(),
 | |
|             cacheService: getIt(),
 | |
|             localAuthService: 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,
 | |
|               );
 | |
|             },
 | |
|           );
 | |
|         },
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 | |
| // flutter pub run easy_localization:generate -S assets/langs -f keys -o locale_keys.g.dart |