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.

76 lines
2.3 KiB

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/translator.dart';
  6. import 'package:sonnat/core/utils/base_cubit_type.dart';
  7. enum LanguageState {
  8. loading,
  9. loaded,
  10. }
  11. enum CurrentLanguage {
  12. en,
  13. fa,
  14. ar,
  15. }
  16. enum Languages {
  17. fa('fa'),
  18. en('en'),
  19. ar('ar');
  20. const Languages(this.value);
  21. final String value;
  22. }
  23. class LanguageCubit extends Cubit<BaseCubitType<LanguageState>> {
  24. final AppSettingBoxRepository _repository = AppSettingBoxRepositoryImpl(appSettingBox: AppSettingBox());
  25. LanguageCubit() : super(BaseCubitType(eventName: LanguageState.loading)) {
  26. _initial();
  27. }
  28. Future<void> _initial() async {
  29. String? language = _repository.getCurrentLanguage();
  30. if (language == null || language == '') {
  31. await Translator.setNewLanguage(Languages.fa);
  32. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa));
  33. return;
  34. }
  35. switch (language) {
  36. case 'fa':
  37. await Translator.setNewLanguage(Languages.fa);
  38. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa));
  39. return;
  40. case 'en':
  41. await Translator.setNewLanguage(Languages.en);
  42. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.en));
  43. return;
  44. case 'ar':
  45. await Translator.setNewLanguage(Languages.ar);
  46. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.ar));
  47. return;
  48. }
  49. }
  50. String getCurrentLanguage() {
  51. String? language = _repository.getCurrentLanguage();
  52. if (language == null || language == '') {
  53. return 'fa';
  54. }
  55. return language;
  56. }
  57. Future<void> changeLanguage() async {
  58. if (getCurrentLanguage() == 'fa') {
  59. await Translator.setNewLanguage(Languages.en);
  60. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.en));
  61. } else {
  62. await Translator.setNewLanguage(Languages.fa);
  63. emit(BaseCubitType(eventName: LanguageState.loaded, data: CurrentLanguage.fa));
  64. }
  65. }
  66. }