import 'package:ebroker/exports/main_export.dart'; import 'package:ebroker/utils/Encryption/rsa.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart'; import '../../Repositories/system_repository.dart'; import '../../model/system_settings_model.dart'; abstract class FetchSystemSettingsState {} class FetchSystemSettingsInitial extends FetchSystemSettingsState {} class FetchSystemSettingsInProgress extends FetchSystemSettingsState {} class FetchSystemSettingsSuccess extends FetchSystemSettingsState { final Map settings; FetchSystemSettingsSuccess({ required this.settings, }); Map toMap() { return { 'settings': settings, }; } factory FetchSystemSettingsSuccess.fromMap(Map map) { return FetchSystemSettingsSuccess( settings: map['settings'] as Map, ); } } class FetchSystemSettingsFailure extends FetchSystemSettingsState { final String errorMessage; FetchSystemSettingsFailure(this.errorMessage); } class FetchSystemSettingsCubit extends Cubit with HydratedMixin { FetchSystemSettingsCubit() : super(FetchSystemSettingsInitial()); final SystemRepository _systemRepository = SystemRepository(); Future fetchSettings( {required bool isAnonymouse, bool? forceRefresh}) async { try { if (forceRefresh != true) { if (state is FetchSystemSettingsSuccess) { await Future.delayed( const Duration(seconds: AppSettings.hiddenAPIProcessDelay)); } else { emit(FetchSystemSettingsInProgress()); } } else { emit(FetchSystemSettingsInProgress()); } if (forceRefresh == true) { Map settings = await _systemRepository.fetchSystemSettings( isAnonymouse: isAnonymouse); Constant.currencySymbol = _getSetting(settings, SystemSetting.currencySymball); Constant.googlePlaceAPIkey = RSAEncryption().decrypt( privateKey: Constant.keysDecryptionPasswordRSA, encryptedData: settings['data']['place_api_key']); Constant.isAdmobAdsEnabled = (settings['data']['show_admob_ads'] == "1"); Constant.adaptThemeColorSvg = (settings['data']['svg_clr'] == "1"); Constant.admobBannerAndroid = settings['data']?['android_banner_ad_id'] ?? ""; Constant.admobBannerIos = settings['data']?['ios_banner_ad_id'] ?? ""; Constant.admobInterstitialAndroid = settings['data']?['android_interstitial_ad_id'] ?? ""; Constant.admobInterstitialIos = settings['data']?['ios_interstitial_ad_id'] ?? ""; emit(FetchSystemSettingsSuccess(settings: settings)); } else { if (state is! FetchSystemSettingsSuccess) { Map settings = await _systemRepository.fetchSystemSettings( isAnonymouse: isAnonymouse); Constant.currencySymbol = _getSetting(settings, SystemSetting.currencySymball); Constant.googlePlaceAPIkey = RSAEncryption().decrypt( privateKey: Constant.keysDecryptionPasswordRSA, encryptedData: settings['data']['place_api_key']); Constant.isAdmobAdsEnabled = (settings['data']['show_admob_ads'] == "1"); Constant.adaptThemeColorSvg = (settings['data']['svg_clr'] == "1"); Constant.admobBannerAndroid = settings['data']['android_banner_ad_id'] ?? ""; Constant.admobBannerIos = settings['data']['ios_banner_ad_id'] ?? ""; Constant.admobInterstitialAndroid = settings['data']['android_interstitial_ad_id'] ?? ""; Constant.admobInterstitialIos = settings['data']['ios_interstitial_ad_id'] ?? ""; emit(FetchSystemSettingsSuccess(settings: settings)); } else { Constant.googlePlaceAPIkey = RSAEncryption().decrypt( privateKey: Constant.keysDecryptionPasswordRSA, encryptedData: (state as FetchSystemSettingsSuccess) .settings['data']['place_api_key']); Constant.currencySymbol = (state as FetchSystemSettingsSuccess) .settings['data']['currency_symbol'] ?? ""; Constant.isAdmobAdsEnabled = ((state as FetchSystemSettingsSuccess) .settings['data']['show_admob_ads'] == "1"); Constant.admobBannerAndroid = (state as FetchSystemSettingsSuccess) .settings['data']['android_banner_ad_id'] ?? ""; Constant.admobBannerIos = (state as FetchSystemSettingsSuccess) .settings['data']['ios_banner_ad_id'] ?? ""; Constant.adaptThemeColorSvg = ((state as FetchSystemSettingsSuccess) .settings['data']['svg_clr'] == "1"); Constant.admobInterstitialAndroid = (state as FetchSystemSettingsSuccess).settings['data'] ['android_interstitial_ad_id'] ?? ""; Constant.admobInterstitialIos = (state as FetchSystemSettingsSuccess) .settings['data']['ios_interstitial_ad_id'] ?? ""; emit(FetchSystemSettingsSuccess( settings: (state as FetchSystemSettingsSuccess).settings)); } } } catch (e) { emit(FetchSystemSettingsFailure(e.toString())); } } dynamic getSetting(SystemSetting selected) { if (state is FetchSystemSettingsSuccess) { Map settings = (state as FetchSystemSettingsSuccess).settings['data']; if (selected == SystemSetting.language) { return settings['languages']; } if (selected == SystemSetting.demoMode) { if (settings.containsKey("demo_mode")) { return settings['demo_mode']; } else { return false; } } /// where selected is equals to type var selectedSettingData = (settings[Constant.systemSettingKeys[selected]]); return selectedSettingData; } } Map getRawSettings() { if (state is FetchSystemSettingsSuccess) { return (state as FetchSystemSettingsSuccess).settings['data']; } return {}; } dynamic _getSetting(Map settings, SystemSetting selected) { var selectedSettingData = settings['data'][Constant.systemSettingKeys[selected]]; return selectedSettingData; } @override FetchSystemSettingsState? fromJson(Map json) { try { if (json['cubit_state'] == "FetchSystemSettingsSuccess") { FetchSystemSettingsSuccess fetchSystemSettingsSuccess = FetchSystemSettingsSuccess.fromMap(json); return fetchSystemSettingsSuccess; } } catch (e) {} return null; } @override Map? toJson(FetchSystemSettingsState state) { try { if (state is FetchSystemSettingsSuccess) { Map mapped = state.toMap(); mapped['cubit_state'] = "FetchSystemSettingsSuccess"; return mapped; } } catch (e) {} return null; } }