import 'dart:async'; import 'dart:io'; import 'package:bloc/bloc.dart'; import 'package:flutter/material.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/app/presentation/bloc/app_bloc.dart'; import 'package:hadi_hoda_flutter/features/app/presentation/bloc/app_event.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'; import 'package:hadi_hoda_flutter/init_bindings.dart'; class LanguageBloc extends Bloc { /// ------------constructor------------ LanguageBloc() : super(const LanguageState()) { on(_changeLanguageEvent); on(_saveLevelsEvent); on(_initLanguageEvent); } /// ------------UseCases------------ /// ------------Variables------------ /// ------------Controllers------------ /// ------------Functions------------ FutureOr _changeLanguageEvent( ChangeLanguageEvent event, Emitter emit, ) { emit(state.copyWith(selectedLang: event.lang)); } /// ------------Api Calls------------ FutureOr _saveLevelsEvent( SaveLevelsEvent event, Emitter emit, ) async { await Future.wait([ LocalStorage.saveData( key: MyConstants.selectLanguage, value: state.selectedLang.code ?? MyConstants.defaultLanguage, ), ]); AppBloc appBloc = locator(); appBloc.add( ChangeLocaleEvent(state.selectedLang.locale ?? Locale('en', 'US'))); if (Directory( '${StoragePath.documentDir.path}/${state.selectedLang .code}/answer_audio') .existsSync() && Directory( '${StoragePath.documentDir.path}/${state.selectedLang .code}/question_audio') .existsSync()) { if (ContextProvider.context.mounted) { ContextProvider.context.goNamed(Routes.homePage); } } else { await Future.wait([ LocalStorage.deleteData(key: MyConstants.downloadedAudio), LocalStorage.deleteData(key: MyConstants.extractedAudio), ]); if (ContextProvider.context.mounted) { ContextProvider.context.goNamed(Routes.downloadPage); } } } FutureOr _initLanguageEvent(InitLanguageEvent event, Emitter emit) { final String selectedLanguage = LocalStorage.readData( key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; emit(state.copyWith(selectedLang: LanguageEntity(code: selectedLanguage))); } }