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
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));
|
|
}
|
|
}
|