import 'package:data/app_setting_data/repository/app_setting_box_repository_impl.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:local_db_core/lib/boxes/box_list/setting_box/app_setting_box.dart'; import 'package:repositories/app_setting_box_domain/repository/app_setting_box_repository.dart'; import 'package:sonnat/core/language/languages.dart'; import 'package:sonnat/core/language/translator.dart'; import 'package:sonnat/core/utils/base_cubit_type.dart'; enum LanguageState { loading, loaded, } enum CurrentLanguage { en, fa, ar, } class LanguageCubit extends Cubit> { final AppSettingBoxRepository _repository = AppSettingBoxRepositoryImpl(appSettingBox: AppSettingBox()); LanguageCubit() : super(BaseCubitType(eventName: LanguageState.loading)) { _initial(); } Future _initial() async { String? language = _repository.getCurrentLanguage(); if (language == null || language == '') { await Translator.setNewLanguage(Languages.fa); emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa)); return; } switch (language) { case 'fa': await Translator.setNewLanguage(Languages.fa); emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa)); return; case 'en': await Translator.setNewLanguage(Languages.en); emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.en)); return; case 'ar': await Translator.setNewLanguage(Languages.ar); emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.ar)); return; } } String getCurrentLanguage() { String? language = _repository.getCurrentLanguage(); if (language == null || language == '') { return 'fa'; } return language; } Future changeLanguage() async { if (getCurrentLanguage() == 'fa') { await Translator.setNewLanguage(Languages.en); emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.en)); } else { await Translator.setNewLanguage(Languages.fa); emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa)); } } }