import 'package:ebroker/Ui/screens/widgets/Erros/something_went_wrong.dart'; import 'package:ebroker/data/cubits/project/fetch_projects.dart'; import 'package:ebroker/exports/main_export.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:google_mobile_ads/google_mobile_ads.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart'; import 'package:path_provider/path_provider.dart'; import '../Ui/screens/splash_screen.dart'; import '../data/Repositories/personalized_feed_repository.dart'; import '../data/cubits/Personalized/fetch_personalized_properties.dart'; import '../data/model/Personalized/personalized_settings.dart'; import '../data/model/app_settings_datamodel.dart'; import '../firebase_options.dart'; import '../main.dart'; import '../utils/Network/apiCallTrigger.dart'; import '../utils/api.dart'; import '../utils/guestChecker.dart'; import '../utils/ui_utils.dart'; import 'default_app_setting.dart'; PersonalizedInterestSettings personalizedInterestSettings = PersonalizedInterestSettings.empty(); AppSettingsDataModel appSettings = fallbackSettingAppSettings; /// getAppSettings() async { await LoadAppSettings().load(); } Future getLanguage() async { await getDefaultLanguage( () {}, ); } void initApp() async { ///Note: this file's code is very necessary and sensitive if you change it, this might affect whole app , So change it carefully. ///This must be used do not remove this line WidgetsFlutterBinding.ensureInitialized(); MobileAds.instance.initialize(); await HiveUtils.initBoxes(); // await Isolate.spawn(getLanguage, languageSettingReceivePort.sendPort); Api.initInterceptors(); ///This is the widget to show uncaught runtime error in this custom widget so that user can know in that screen something is wrong instead of grey screen SomethingWentWrong.asGlobalErrorBuilder(); if (Firebase.apps.isNotEmpty) { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); } else { await Firebase.initializeApp(); } FirebaseMessaging.onBackgroundMessage( NotificationService.onBackgroundMessageHandler); HydratedBloc.storage = await HydratedStorage.build( storageDirectory: await getApplicationDocumentsDirectory(), ); SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) .then((_) async { SystemChrome.setSystemUIOverlayStyle( const SystemUiOverlayStyle(statusBarColor: Colors.transparent)); runApp(const EntryPoint()); }); } class App extends StatefulWidget { const App({super.key}); @override State createState() => _AppState(); } class _AppState extends State { @override void initState() { ///Here Fetching property report reasons context.read().fetch(); context.read().loadCurrentLanguage(); AppTheme currentTheme = HiveUtils.getCurrentTheme(); ///Initialized notification services LocalAwsomeNotification().init(context); /////////////////////////////////////// NotificationService.init(context); /// Initialized dynamic links for share properties feature context.read().changeTheme(currentTheme); APICallTrigger.onTrigger( () { //THIS WILL be CALLED WHEN USER WILL LOGIN FROM ANONYMOUS USER. context.read().emptyCubit(); context.read().fetch(); loadInitialData(context, loadWithoutDelay: true); }, ); UiUtils.setContext(context); super.initState(); } @override Widget build(BuildContext context) { //Continuously watching theme change AppTheme currentTheme = context.watch().state.appTheme; return BlocListener( listener: (context, state) { context.read().setAPIKeys(); }, child: BlocBuilder( builder: (context, languageState) { return MaterialApp( initialRoute: Routes .splash, // App will start from here splash screen is first screen, navigatorKey: Constant .navigatorKey, //This navigator key is used for Navigate users through notification title: Constant.appName, debugShowCheckedModeBanner: false, onGenerateRoute: Routes.onGenerateRouted, theme: appThemeData[currentTheme], builder: (context, child) { TextDirection direction; //here we are languages direction locally if (languageState is LanguageLoader) { if (Constant.totalRtlLanguages .contains((languageState).languageCode)) { direction = TextDirection.rtl; } else { direction = TextDirection.ltr; } } else { direction = TextDirection.ltr; } return MediaQuery( data: MediaQuery.of(context).copyWith( textScaler: const TextScaler.linear(1.0), // textScaleFactor: // 1.0, //set text scale factor to 1 so that this will not resize app's text while user change their system settings text scale ), child: Directionality( textDirection: direction, //This will convert app direction according to language child: child!, ), ); }, localizationsDelegates: const [ AppLocalization.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], locale: loadLocalLanguageIfFail(languageState), ); }, ), ); } dynamic loadLocalLanguageIfFail(LanguageState state) { if ((state is LanguageLoader)) { return Locale(state.languageCode); } else if (state is LanguageLoadFail) { return const Locale("en"); } } } void loadInitialData(BuildContext context, {bool? loadWithoutDelay, bool? forceRefresh}) { context.read().fetchProjects(); context.read().fetchSlider(context, loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context.read().fetchCategories( loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context .read() .fetch(loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context .read() .fetch(loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context .read() .fetch(loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context .read() .fetch(loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context.read().fetchCityCategory( loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context .read() .fetch(loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context .read() .fetch(loadWithoutDelay: loadWithoutDelay, forceRefresh: forceRefresh); context.read().setContext(context); context.read().fetch(); // if (widget.from != "login") { PersonalizedFeedRepository().getUserPersonalizedSettings().then((value) { personalizedInterestSettings = value; }); GuestChecker.listen().addListener(() { if (GuestChecker.value == false) { PersonalizedFeedRepository().getUserPersonalizedSettings().then((value) { personalizedInterestSettings = value; }); } }); // // } }