Sonnat Project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.2 KiB

1 year ago
1 year ago
  1. import 'package:data/app_setting_data/repository/app_setting_box_repository_impl.dart';
  2. import 'package:flutter_bloc/flutter_bloc.dart';
  3. import 'package:local_db_core/lib/boxes/box_list/setting_box/app_setting_box.dart';
  4. import 'package:repositories/app_setting_box_domain/repository/app_setting_box_repository.dart';
  5. import 'package:sonnat/core/language/languages.dart';
  6. import 'package:sonnat/core/language/translator.dart';
  7. import 'package:sonnat/core/utils/base_cubit_type.dart';
  8. enum LanguageState {
  9. loading,
  10. loaded,
  11. }
  12. enum CurrentLanguage {
  13. en,
  14. fa,
  15. ar,
  16. }
  17. class LanguageCubit extends Cubit<BaseCubitType<LanguageState>> {
  18. final AppSettingBoxRepository _repository = AppSettingBoxRepositoryImpl(appSettingBox: AppSettingBox());
  19. LanguageCubit() : super(BaseCubitType(eventName: LanguageState.loading)) {
  20. _initial();
  21. }
  22. Future<void> _initial() async {
  23. String? language = _repository.getCurrentLanguage();
  24. if (language == null || language == '') {
  25. await Translator.setNewLanguage(Languages.fa);
  26. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa));
  27. return;
  28. }
  29. switch (language) {
  30. case 'fa':
  31. await Translator.setNewLanguage(Languages.fa);
  32. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa));
  33. return;
  34. case 'en':
  35. await Translator.setNewLanguage(Languages.en);
  36. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.en));
  37. return;
  38. case 'ar':
  39. await Translator.setNewLanguage(Languages.ar);
  40. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.ar));
  41. return;
  42. }
  43. }
  44. String getCurrentLanguage() {
  45. String? language = _repository.getCurrentLanguage();
  46. if (language == null || language == '') {
  47. return 'fa';
  48. }
  49. return language;
  50. }
  51. Future<void> changeLanguage() async {
  52. if (getCurrentLanguage() == 'fa') {
  53. await Translator.setNewLanguage(Languages.en);
  54. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.en));
  55. } else {
  56. await Translator.setNewLanguage(Languages.fa);
  57. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa));
  58. }
  59. }
  60. }