import 'package:be_happy/core/result.dart'; import 'package:be_happy/domain/entities/subscription.dart'; import 'package:be_happy/domain/usecase/activate_subscription_usecase.dart'; import 'package:be_happy/domain/usecase/get_subscription_by_id_usecase.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../event/subscription_details_event.dart'; import '../state/susbcription_details_state.dart'; class SubscriptionDetailsBloc extends Bloc { final GetSubscriptionByIdUsecase getSubscriptionByIdUsecase; final ActivateSubscriptionUsecase activateSubscriptionUsecase; SubscriptionDetailsBloc(this.getSubscriptionByIdUsecase, this.activateSubscriptionUsecase) : super(DetailsLoading()) { on((event, emit) async { emit(DetailsLoading()); try { final result = await getSubscriptionByIdUsecase(event.subscriptionId); switch (result) { case Success(): final sub = result.data; if (sub == null) return; emit(DetailsContentState( subscription: sub, selectedPeriod: sub.options.first, )); case Failure(): emit(DetailsError("Ошибка при запросе данных")); } } catch (e) { emit(DetailsError("Не удалось загрузить данные")); } }); on((event, emit) { if (state is DetailsContentState) { emit((state as DetailsContentState).copyWith(selectedPeriod: event.period)); } }); on((event, emit) { if (state is DetailsContentState) { emit((state as DetailsContentState).copyWith(isAgreed: event.value)); } }); on((event, emit) { switch(state) { case DetailsContentState contentState: activateSubscriptionUsecase(contentState.selectedPeriod.id); break; default: break; } }); } }