import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../core/resources/data_state.dart'; import '../../../../core/usecase/use_case.dart'; import '../../domain/use_cases/get_profile_usecase.dart'; import '../../domain/use_cases/save_profile_usecase.dart'; import 'profile_event.dart'; import 'profile_state.dart'; import 'profile_status.dart'; class ProfileBloc extends Bloc { final GetProfileUseCase getProfileUseCase; final SaveProfileUseCase saveProfileUseCase; ProfileBloc(this.getProfileUseCase, this.saveProfileUseCase) : super(ProfileBlocState.initial()) { on((event, emit) => _load(emit)); on((event, emit) async { emit(state.copyWith(saveStatus: ProfileSaveLoading())); final res = await saveProfileUseCase( ProfileParams(event.firstName, event.avatar)); if (res is DataSuccess) { emit(state.copyWith(saveStatus: ProfileSaveSuccess())); await _load(emit); } else { emit(state.copyWith(saveStatus: ProfileSaveError(res.error!))); } }); } Future _load(Emitter emit) async { emit(state.copyWith(loadStatus: ProfileLoadLoading())); final res = await getProfileUseCase(const NoParams()); if (res is DataSuccess) { emit(state.copyWith(loadStatus: ProfileLoadLoaded(res.data!))); } else { emit(state.copyWith(loadStatus: ProfileLoadError(res.error!))); } } }