import 'dart:async'; import 'dart:io'; import 'package:bloc/bloc.dart'; import 'package:go_router/go_router.dart'; import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; import 'package:hadi_hoda_flutter/core/utils/context_provider.dart'; import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; import 'package:hadi_hoda_flutter/core/utils/storage_path.dart'; import 'package:hadi_hoda_flutter/features/language/domain/entity/language_entity.dart'; import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_event.dart'; import 'package:hadi_hoda_flutter/features/language/presentation/bloc/language_state.dart'; class LanguageBloc extends Bloc { /// ------------constructor------------ LanguageBloc() : super(const LanguageState()) { LocalStorage.saveData(key: MyConstants.firstLanguagePage, value: 'true'); on(_changeLanguageEvent); on(_saveLevelsEvent); on(_initLanguageEvent); } /// ------------UseCases------------ /// ------------Variables------------ final List languages = [ LanguageEntity(title: 'Persian (فارسی)', code: 'fa'), LanguageEntity(title: 'English (English)', code: 'en'), LanguageEntity(title: 'Arabic (عربی)', code: 'ar'), ]; /// ------------Controllers------------ /// ------------Functions------------ FutureOr _changeLanguageEvent( ChangeLanguageEvent event, Emitter emit, ) { emit(state.copyWith(selectedLang: event.lang)); } /// ------------Api Calls------------ FutureOr _saveLevelsEvent( SaveLevelsEvent event, Emitter emit, ) async { await LocalStorage.saveData( key: MyConstants.selectLanguage, value: state.selectedLang.code ?? 'fa', ); if (Directory( '${StoragePath.documentDir.path}/${state.selectedLang.code}/files') .existsSync()) { if (ContextProvider.context.mounted) { ContextProvider.context.goNamed(Routes.homePage); } } else { await Future.wait([ LocalStorage.deleteData(key: MyConstants.downloadCompleted), LocalStorage.deleteData(key: MyConstants.extractCompleted), ]); if (ContextProvider.context.mounted) { ContextProvider.context.goNamed(Routes.introPage); } } } FutureOr _initLanguageEvent(InitLanguageEvent event, Emitter emit) { final String selectedLanguage = LocalStorage.readData(key: MyConstants.selectLanguage).isEmpty ? 'fa' : LocalStorage.readData(key: MyConstants.selectLanguage); emit(state.copyWith(selectedLang: LanguageEntity(code: selectedLanguage))); } }