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.
 
 
 
 

61 lines
2.1 KiB

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<LanguageEvent, LanguageState> {
final GetLanguagesUseCase _getLanguagesUseCase;
final GetSelectedLanguageUseCase _getSelectedLanguageUseCase;
final SaveSelectedLanguageUseCase _saveSelectedLanguageUseCase;
LanguageBloc(
this._getLanguagesUseCase,
this._getSelectedLanguageUseCase,
this._saveSelectedLanguageUseCase,
) : super(const LanguageState()) {
on<GetLanguagesEvent>(_onGetLanguagesEvent);
on<SelectLanguageEvent>(_onSelectLanguageEvent);
}
FutureOr<void> _onGetLanguagesEvent(
GetLanguagesEvent event,
Emitter<LanguageState> 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<void> _onSelectLanguageEvent(
SelectLanguageEvent event,
Emitter<LanguageState> emit,
) async {
await _saveSelectedLanguageUseCase(event.language.code);
emit(state.copyWith(selectedLanguage: event.language));
}
}