fix
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import 'package:be_happy/core/result.dart';
|
||||
import 'package:be_happy/domain/entities/payment_card.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_payment_cards_usecase.dart';
|
||||
import 'package:be_happy/domain/usecase/get_subscription_by_id_usecase.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
@@ -12,27 +14,35 @@ import '../state/susbcription_details_state.dart';
|
||||
class SubscriptionDetailsBloc
|
||||
extends Bloc<SubscriptionDetailsEvent, SubscriptionDetailsState> {
|
||||
final GetSubscriptionByIdUsecase getSubscriptionByIdUsecase;
|
||||
final GetPaymentCardsUsecase getPaymentCardsUsecase;
|
||||
final ActivateSubscriptionUsecase activateSubscriptionUsecase;
|
||||
final GetClientSubscriptionsUsecase getClientSubscriptionsUsecase;
|
||||
|
||||
SubscriptionDetailsBloc(
|
||||
this.getSubscriptionByIdUsecase,
|
||||
this.getPaymentCardsUsecase,
|
||||
this.activateSubscriptionUsecase,
|
||||
this.getClientSubscriptionsUsecase,
|
||||
) : super(DetailsLoading()) {
|
||||
on<LoadDetailsEvent>((event, emit) async {
|
||||
emit(DetailsLoading());
|
||||
try {
|
||||
final result = await getSubscriptionByIdUsecase(event.subscriptionId);
|
||||
final cardsResult = await getPaymentCardsUsecase();
|
||||
|
||||
final subsResult = await getSubscriptionByIdUsecase(
|
||||
event.subscriptionId,
|
||||
);
|
||||
|
||||
final clientSubsResult = await getClientSubscriptionsUsecase();
|
||||
bool isPurchased = false;
|
||||
|
||||
switch (clientSubsResult) {
|
||||
case Success<List<ClientSubscription>>():
|
||||
isPurchased = clientSubsResult.data?.any(
|
||||
isPurchased =
|
||||
clientSubsResult.data?.any(
|
||||
(element) => element.subscriptionId == event.subscriptionId,
|
||||
) ?? false;
|
||||
) ??
|
||||
false;
|
||||
break;
|
||||
|
||||
case Failure<List<ClientSubscription>>():
|
||||
@@ -40,16 +50,30 @@ class SubscriptionDetailsBloc
|
||||
break;
|
||||
}
|
||||
|
||||
switch (result) {
|
||||
switch (subsResult) {
|
||||
case Success<Subscription>():
|
||||
final sub = result.data;
|
||||
final sub = subsResult.data;
|
||||
if (sub == null) return;
|
||||
|
||||
List<PaymentCard> loadedCards = [];
|
||||
PaymentCard? defaultCard;
|
||||
|
||||
if (cardsResult is Success<List<PaymentCard>>) {
|
||||
loadedCards = cardsResult.data ?? [];
|
||||
if (loadedCards.isNotEmpty) {
|
||||
defaultCard = loadedCards.firstWhere(
|
||||
(element) => element.isMain,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
emit(
|
||||
DetailsContentState(
|
||||
subscription: sub,
|
||||
selectedPeriod: sub.options.first,
|
||||
isAlreadyPurchased: isPurchased,
|
||||
cards: loadedCards,
|
||||
selectedCard: defaultCard ?? loadedCards.first,
|
||||
),
|
||||
);
|
||||
break;
|
||||
@@ -70,6 +94,12 @@ class SubscriptionDetailsBloc
|
||||
}
|
||||
});
|
||||
|
||||
on<SelectCardEvent>((event, emit) {
|
||||
if (state is DetailsContentState) {
|
||||
emit((state as DetailsContentState).copyWith(selectedCard: event.card));
|
||||
}
|
||||
});
|
||||
|
||||
on<ToggleAgreementEvent>((event, emit) {
|
||||
if (state is DetailsContentState) {
|
||||
emit((state as DetailsContentState).copyWith(isAgreed: event.value));
|
||||
@@ -79,16 +109,18 @@ class SubscriptionDetailsBloc
|
||||
on<ActivateSubscriptionPressed>((event, emit) async {
|
||||
switch (state) {
|
||||
case DetailsContentState contentState:
|
||||
if (!contentState.isAgreed) {
|
||||
if (!contentState.isAgreed || contentState.selectedCard == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final result = await activateSubscriptionUsecase(contentState.selectedPeriod.id);
|
||||
final result = await activateSubscriptionUsecase(
|
||||
contentState.selectedPeriod.id,
|
||||
contentState.selectedCard.id,
|
||||
);
|
||||
|
||||
if (result is Success) {
|
||||
emit(contentState.copyWith(isSuccess: true));
|
||||
} else {
|
||||
}
|
||||
} else {}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user