import 'dart:io'; import 'package:doctor_app_flutter/client/http_Overrides.dart'; import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/provider/robot_provider.dart'; import 'package:doctor_app_flutter/core/service/AnalyticsService.dart'; import 'package:doctor_app_flutter/core/service/NavigationService.dart'; import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/livecare_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/locator.dart'; import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/unsafe_device.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:timezone/data/latest_all.dart' as tz; import 'core/service/security_service.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); HttpOverrides.global = MyHttpOverrides(); setupLocator(); await clearPrefsOnFirstLaunch(); tz.initializeTimeZones(); if (!kReleaseMode) { await locator.get().initialize(); // Set up critical threat callback to navigate to unsafe device page locator.get().setOnCriticalThreatCallback(() { final navigationService = locator.get(); final context = navigationService.navigatorKey.currentContext; if (context != null) { // Clear entire navigation stack and show unsafe device page Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute(builder: (_) => const UnsafeDevice()), (route) => false, // Remove all previous routes ); debugPrint('🚨 Navigated to UnsafeDevice page - Critical threat detected'); } }); } runApp(MyApp()); } //clearing all the shared pref on the inital start to avoid any profile issue Future clearPrefsOnFirstLaunch() async { SharedPreferences prefs = await SharedPreferences.getInstance(); bool isFirstLaunch = prefs.getBool('isFirstLaunch') ?? true; await prefs.clear(); // Clear all prefs } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { AppGlobal.CONTEX = context; return LayoutBuilder( builder: (context, constraints) { return OrientationBuilder( builder: (context, orientation) { SizeConfig().init(constraints, orientation); return MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => AuthenticationViewModel()), ChangeNotifierProvider(create: (context) => ProjectViewModel()), ChangeNotifierProvider(create: (context) => LiveCareViewModel()), StreamProvider.value(value: RobotProvider().intStream(), initialData: RobotProvider().setValue({})), ], child: Consumer( builder: (context, projectProvider, child) => SafeArea( top: false, bottom: Platform.isAndroid ? true : false, child: MaterialApp( showSemanticsDebugger: false, title: 'Doctors App', locale: projectProvider.appLocal, localizationsDelegates: [ TranslationBaseDelegate(), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: [ const Locale('ar', ''), // Arabic const Locale('en', ''), // English ], theme: ThemeData( primarySwatch: Colors.grey, primaryColor: Colors.grey, //buttonColor: HexColor('#D02127'), fontFamily: 'Poppins', dividerColor: Colors.grey[350], // backgroundColor: Color.fromRGBO(255, 255, 255, 1), useMaterial3: false, ), navigatorKey: locator().navigatorKey, navigatorObservers: [locator().getAnalyticsObserver()], initialRoute: INIT_ROUTE, routes: routes, debugShowCheckedModeBanner: false, ), ), ), ); }, ); }, ); } }