import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:hadi_hoda_flutter/core/params/no_params.dart'; import 'package:hadi_hoda_flutter/core/status/base_status.dart'; import 'package:hadi_hoda_flutter/features/language/domain/usecases/get_languages_usecase.dart'; import 'package:hadi_hoda_flutter/features/language/domain/usecases/get_selected_language_usecase.dart'; import 'package:hadi_hoda_flutter/features/language/domain/usecases/save_selected_language_usecase.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 { final GetLanguagesUseCase _getLanguagesUseCase; final GetSelectedLanguageUseCase _getSelectedLanguageUseCase; final SaveSelectedLanguageUseCase _saveSelectedLanguageUseCase; LanguageBloc( this._getLanguagesUseCase, this._getSelectedLanguageUseCase, this._saveSelectedLanguageUseCase, ) : super(const LanguageState()) { on(_onGetLanguagesEvent); on(_onSelectLanguageEvent); } FutureOr _onGetLanguagesEvent( GetLanguagesEvent event, Emitter emit, ) async { emit(state.copyWith(getLanguagesStatus: const BaseLoading())); final result = await _getLanguagesUseCase(NoParams()); if (result.isSuccess) { final languages = result.data!; final selectedResult = await _getSelectedLanguageUseCase(languages); emit( state.copyWith( getLanguagesStatus: const BaseComplete(''), languages: languages, selectedLanguage: selectedResult.data, ), ); } else { emit( state.copyWith( getLanguagesStatus: BaseError(result.error!.errorMessage), ), ); } } FutureOr _onSelectLanguageEvent( SelectLanguageEvent event, Emitter emit, ) async { await _saveSelectedLanguageUseCase(event.language.code); emit(state.copyWith(selectedLanguage: event.language)); } }