import 'dart:io'; import 'dart:ui'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:hive_flutter/adapters.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:intl/intl.dart' as intl; import 'package:news/app/routes.dart'; import 'package:news/cubits/AddNewsCubit.dart'; import 'package:news/cubits/Auth/deleteUserCubit.dart'; import 'package:news/cubits/Auth/registerTokenCubit.dart'; import 'package:news/cubits/Auth/updateUserCubit.dart'; import 'package:news/cubits/Author/authorCubit.dart'; import 'package:news/cubits/Author/authorNewsCubit.dart'; import 'package:news/cubits/Bookmark/UpdateBookmarkCubit.dart'; import 'package:news/cubits/Bookmark/bookmarkCubit.dart'; import 'package:news/cubits/ConnectivityCubit.dart'; import 'package:news/cubits/LikeAndDislikeNews/LikeAndDislikeCubit.dart'; import 'package:news/cubits/LikeAndDislikeNews/updateLikeAndDislikeCubit.dart'; import 'package:news/cubits/NewsComment/deleteCommentCubit.dart'; import 'package:news/cubits/NewsComment/flagCommentCubit.dart'; import 'package:news/cubits/NewsComment/likeAndDislikeCommCubit.dart'; import 'package:news/cubits/NewsComment/setCommentCubit.dart'; import 'package:news/cubits/UserPreferences/setUserPreferenceCatCubit.dart'; import 'package:news/cubits/adSpacesNewsDetailsCubit.dart'; import 'package:news/cubits/appLocalizationCubit.dart'; import 'package:news/cubits/Auth/authCubit.dart'; import 'package:news/cubits/breakingNewsCubit.dart'; import 'package:news/cubits/commentNewsCubit.dart'; import 'package:news/cubits/deleteImageId.dart'; import 'package:news/cubits/deleteUserNewsCubit.dart'; import 'package:news/cubits/generalNewsCubit.dart'; import 'package:news/cubits/getSurveyAnswerCubit.dart'; import 'package:news/cubits/getUserDataByIdCubit.dart'; import 'package:news/cubits/getUserNewsCubit.dart'; import 'package:news/cubits/languageCubit.dart'; import 'package:news/cubits/locationCityCubit.dart'; import 'package:news/cubits/privacyTermsCubit.dart'; import 'package:news/cubits/relatedNewsCubit.dart'; import 'package:news/cubits/rssFeedCubit.dart'; import 'package:news/cubits/sectionByIdCubit.dart'; import 'package:news/cubits/setNewsViewsCubit.dart'; import 'package:news/cubits/setSurveyAnswerCubit.dart'; import 'package:news/cubits/settingCubit.dart'; import 'package:news/cubits/Auth/socialSignUpCubit.dart'; import 'package:news/cubits/UserPreferences/userByCategoryCubit.dart'; import 'package:news/cubits/slugCheckCubit.dart'; import 'package:news/cubits/slugNewsCubit.dart'; import 'package:news/cubits/tagCubit.dart'; import 'package:news/cubits/tagNewsCubit.dart'; import 'package:news/cubits/NewsByIdCubit.dart'; import 'package:news/cubits/appSystemSettingCubit.dart'; import 'package:news/cubits/categoryCubit.dart'; import 'package:news/cubits/featureSectionCubit.dart'; import 'package:news/cubits/languageJsonCubit.dart'; import 'package:news/cubits/liveStreamCubit.dart'; import 'package:news/cubits/otherPagesCubit.dart'; import 'package:news/cubits/subCategoryCubit.dart'; import 'package:news/cubits/surveyQuestionCubit.dart'; import 'package:news/cubits/themeCubit.dart'; import 'package:news/cubits/updateBottomsheetContentCubit.dart'; import 'package:news/cubits/videosCubit.dart'; import 'package:news/cubits/weatherCubit.dart'; import 'package:news/cubits/GetUserDraftedNewsCubit.dart'; import 'package:news/data/repositories/AddNews/addNewsRepository.dart'; import 'package:news/data/repositories/Auth/authRepository.dart'; import 'package:news/data/repositories/Bookmark/bookmarkRepository.dart'; import 'package:news/data/repositories/BreakingNews/breakNewsRepository.dart'; import 'package:news/data/repositories/CommentNews/commNewsRepository.dart'; import 'package:news/data/repositories/DeleteImageId/deleteImageRepository.dart'; import 'package:news/data/repositories/DeleteUserNews/deleteUserNewsRepository.dart'; import 'package:news/data/repositories/GetSurveyAnswer/getSurveyAnsRepository.dart'; import 'package:news/data/repositories/GetUserById/getUserByIdRepository.dart'; import 'package:news/data/repositories/GetUserNews/getUserNewsRepository.dart'; import 'package:news/data/repositories/LikeAndDisLikeNews/LikeAndDisLikeNewsRepository.dart'; import 'package:news/data/repositories/NewsComment/DeleteComment/deleteCommRepository.dart'; import 'package:news/data/repositories/NewsComment/FlagComment/flagCommRepository.dart'; import 'package:news/data/repositories/NewsComment/LikeAndDislikeComment/likeAndDislikeCommRepository.dart'; import 'package:news/data/repositories/NewsComment/SetComment/setComRepository.dart'; import 'package:news/data/repositories/RelatedNews/relatedNewsRepository.dart'; import 'package:news/data/repositories/SectionById/sectionByIdRepository.dart'; import 'package:news/data/repositories/SetNewsViews/setNewsViewsRepository.dart'; import 'package:news/data/repositories/SetSurveyAnswer/setSurveyAnsRepository.dart'; import 'package:news/data/repositories/SetUserPreferenceCat/setUserPrefCatRepository.dart'; import 'package:news/data/repositories/SurveyQuestion/surveyQueRepository.dart'; import 'package:news/data/repositories/Tag/tagRepository.dart'; import 'package:news/data/repositories/TagNews/tagNewsRepository.dart'; import 'package:news/data/repositories/UserByCategory/userByCatRepository.dart'; import 'package:news/data/repositories/language/languageRepository.dart'; import 'package:news/data/repositories/Settings/settingRepository.dart'; import 'package:news/data/repositories/Settings/settingsLocalDataRepository.dart'; import 'package:news/data/repositories/AppSystemSetting/systemRepository.dart'; import 'package:news/data/repositories/Category/categoryRepository.dart'; import 'package:news/data/repositories/FeatureSection/sectionRepository.dart'; import 'package:news/data/repositories/LanguageJson/languageJsonRepository.dart'; import 'package:news/data/repositories/LiveStream/liveStreamRepository.dart'; import 'package:news/data/repositories/NewsById/NewsByIdRepository.dart'; import 'package:news/data/repositories/OtherPages/otherPagesRepository.dart'; import 'package:news/data/repositories/SubCategory/subCatRepository.dart'; import 'package:news/data/repositories/Videos/videosRepository.dart'; import 'package:news/ui/screens/PushNotificationService.dart'; import 'package:news/ui/styles/appTheme.dart'; import 'package:news/utils/constant.dart'; import 'package:news/utils/hiveBoxKeys.dart'; import 'package:news/utils/uiUtils.dart'; import 'package:package_info_plus/package_info_plus.dart'; late PackageInfo packageInfo; Future initializeApp() async { WidgetsFlutterBinding.ensureInitialized(); HttpOverrides.global = MyHttpOverrides(); SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); MobileAds.instance.initialize(); packageInfo = await PackageInfo.fromPlatform(); await Firebase.initializeApp(); await Hive.initFlutter(); await Hive.openBox(authBoxKey); await Hive.openBox(settingsBoxKey); await Hive.openBox(locationCityBoxKey); await Hive.openBox(videoPreferenceKey); runApp(MultiBlocProvider(providers: [ BlocProvider(create: (_) => ConnectivityCubit(ConnectivityService())), BlocProvider(create: (context) => AppConfigurationCubit(SystemRepository())), BlocProvider(create: (_) => SettingsCubit(SettingsRepository())), BlocProvider(create: (_) => AppLocalizationCubit(SettingsLocalDataRepository())), BlocProvider(create: (_) => ThemeCubit(SettingsLocalDataRepository())), BlocProvider(create: (_) => LanguageJsonCubit(LanguageJsonRepository())), BlocProvider(create: (context) => LanguageCubit(LanguageRepository())), BlocProvider(create: (_) => SectionCubit(SectionRepository())), BlocProvider(create: (_) => PrivacyTermsCubit(OtherPageRepository())), BlocProvider(create: (_) => VideoCubit(VideoRepository())), BlocProvider(create: (_) => NewsByIdCubit(NewsByIdRepository())), BlocProvider(create: (_) => OtherPageCubit(OtherPageRepository())), BlocProvider(create: (_) => LiveStreamCubit(LiveStreamRepository())), BlocProvider(create: (_) => CategoryCubit(CategoryRepository())), BlocProvider(create: (_) => SubCategoryCubit(SubCategoryRepository())), BlocProvider(create: (_) => SurveyQuestionCubit(SurveyQuestionRepository())), BlocProvider(create: (_) => SetSurveyAnsCubit(SetSurveyAnsRepository())), BlocProvider(create: (_) => GetSurveyAnsCubit(GetSurveyAnsRepository())), BlocProvider(create: (_) => CommentNewsCubit(CommentNewsRepository())), BlocProvider(create: (_) => RelatedNewsCubit(RelatedNewsRepository())), BlocProvider(create: (_) => SocialSignUpCubit(AuthRepository())), BlocProvider(create: (_) => AuthCubit(AuthRepository())), BlocProvider(create: (_) => RegisterTokenCubit(AuthRepository())), BlocProvider(create: (_) => UserByCatCubit(UserByCatRepository())), BlocProvider(create: (_) => SetUserPrefCatCubit(SetUserPrefCatRepository())), BlocProvider(create: (_) => UpdateUserCubit(AuthRepository())), BlocProvider(create: (_) => DeleteUserCubit(AuthRepository())), BlocProvider(create: (_) => BookmarkCubit(BookmarkRepository())), BlocProvider(create: (_) => UpdateBookmarkStatusCubit(BookmarkRepository())), BlocProvider(create: (_) => LikeAndDisLikeCubit(LikeAndDisLikeRepository())), BlocProvider(create: (_) => UpdateLikeAndDisLikeStatusCubit(LikeAndDisLikeRepository())), BlocProvider(create: (_) => BreakingNewsCubit(BreakingNewsRepository())), BlocProvider(create: (_) => TagNewsCubit(TagNewsRepository())), BlocProvider(create: (_) => SetCommentCubit(SetCommentRepository())), BlocProvider(create: (_) => LikeAndDislikeCommCubit(LikeAndDislikeCommRepository())), BlocProvider(create: (_) => DeleteCommCubit(DeleteCommRepository())), BlocProvider(create: (_) => SetFlagCubit(SetFlagRepository())), BlocProvider(create: (_) => AddNewsCubit(AddNewsRepository())), BlocProvider(create: (_) => TagCubit(TagRepository())), BlocProvider(create: (_) => GetUserNewsCubit(GetUserNewsRepository())), BlocProvider(create: (_) => DeleteUserNewsCubit(DeleteUserNewsRepository())), BlocProvider(create: (_) => DeleteImageCubit(DeleteImageRepository())), BlocProvider(create: (_) => GetUserByIdCubit(GetUserByIdRepository())), BlocProvider(create: (_) => SectionByIdCubit(SectionByIdRepository())), BlocProvider(create: (_) => SetNewsViewsCubit(SetNewsViewsRepository())), BlocProvider(create: (_) => AdSpacesNewsDetailsCubit()), BlocProvider(create: (_) => LocationCityCubit()), BlocProvider(create: (_) => BottomSheetCubit()), BlocProvider(create: (_) => SlugCheckCubit()), BlocProvider(create: (_) => GeneralNewsCubit()), BlocProvider(create: (_) => RSSFeedCubit()), BlocProvider(create: (_) => SlugNewsCubit()), BlocProvider(create: (_) => WeatherCubit()), BlocProvider(create: (_) => AuthorCubit()), BlocProvider(create: (_) => AuthorNewsCubit()), BlocProvider(create: (_) => GetUserDraftedNewsCubit()) ], child: const MyApp())); } class GlobalScrollBehavior extends ScrollBehavior { @override ScrollPhysics getScrollPhysics(BuildContext context) { return const BouncingScrollPhysics(); } } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State createState() => _MyAppState(); } class _MyAppState extends State { @override void initState() { final pushNotificationService = PushNotificationService(context: context); pushNotificationService.initialise(); var brightness = PlatformDispatcher.instance.platformBrightness; if (SettingsLocalDataRepository().getCurrentTheme().isEmpty) { (brightness == Brightness.dark) ? context.read().changeTheme(AppTheme.Dark) : context.read().changeTheme(AppTheme.Light); } super.initState(); } @override Widget build(BuildContext context) { return Builder(builder: (context) { if (Hive.box(settingsBoxKey).get(currentLanguageCodeKey) != null || Hive.box(settingsBoxKey).get(currentLanguageCodeKey) != "") { initializeDateFormatting(); intl.Intl.defaultLocale = Hive.box(settingsBoxKey).get(currentLanguageCodeKey); //set default Locale @Start } final currentTheme = context.watch().state.appTheme; return BlocBuilder( builder: (context, state) { return MaterialApp( navigatorKey: UiUtils.rootNavigatorKey, theme: appThemeData[currentTheme], debugShowCheckedModeBanner: false, initialRoute: Routes.splash, title: appName, onGenerateRoute: Routes.onGenerateRouted, builder: (context, widget) { return ScrollConfiguration( behavior: GlobalScrollBehavior(), child: Directionality( textDirection: state.isRTL == '' || state.isRTL == 0 ? TextDirection.ltr : TextDirection.rtl, child: Padding( padding: EdgeInsets.only(bottom: MediaQuery.viewPaddingOf(context).bottom), child: widget!, ))); }); }, ); }); } } class MyHttpOverrides extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true; } }