|
|
|
|
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(),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
], 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,
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|