Files
CityCards_Customer_Flutter/lib/checkout/bloc/pass_purchase_details_bloc.dart

103 lines
3.0 KiB
Dart

import 'package:flutter_bloc/flutter_bloc.dart';
import '../../profile/repository/profile_repository.dart';
import '../repository/pass_purchase_details_repository.dart';
import 'pass_purchase_details_event.dart';
import 'pass_purchase_details_state.dart';
class PurchaseDetailsBloc
extends Bloc<PassPurchaseDetailsEvent, PurchaseDetailsState> {
final ProfileRepository _profileRepository;
final PassPurchaseDetailsRepository _purchaseDetailsRepository;
PurchaseDetailsBloc({
ProfileRepository? profileRepository,
PassPurchaseDetailsRepository? purchaseDetailsRepository,
}) : _profileRepository = profileRepository ?? ProfileRepository(),
_purchaseDetailsRepository = purchaseDetailsRepository ?? PassPurchaseDetailsRepository(),
super(PurchaseDetailsInitial()) {
on<LoadProfileEvent>(_onLoadProfile);
on<SetPurchaseDetailsEvent>(_onSetPurchaseDetails);
on<ToggleGiftModeEvent>(_onToggleGiftMode);
on<SubmitUserDetailsEvent>(_onSubmitUserDetails);
}
Future<void> _onLoadProfile(
LoadProfileEvent event,
Emitter<PurchaseDetailsState> emit,
) async {
emit(PurchaseDetailsProfileLoading(isGift: state.isGift));
try {
final profile = await _profileRepository.fetchUserProfile();
emit(PurchaseDetailsLoaded(
isGift: state.isGift,
profile: profile,
));
} catch (e) {
// Handle error - emit loaded state with null profile
emit(PurchaseDetailsLoaded(
isGift: state.isGift,
profile: null,
));
}
}
void _onSetPurchaseDetails(
SetPurchaseDetailsEvent event,
Emitter<PurchaseDetailsState> emit,
) {
final isGift = event.buyPassValue == "gift";
emit(PurchaseDetailsUpdated(
buyPassState: event.buyPassValue,
isGift: isGift,
profile: state.profile,
));
}
void _onToggleGiftMode(
ToggleGiftModeEvent event,
Emitter<PurchaseDetailsState> emit,
) {
emit(PurchaseDetailsLoaded(
isGift: event.isGift,
profile: state.profile,
));
}
Future<void> _onSubmitUserDetails(
SubmitUserDetailsEvent event,
Emitter<PurchaseDetailsState> emit,
) async {
emit(PurchaseDetailsSubmitting(
isGift: state.isGift,
profile: state.profile,
));
try {
final response = await _purchaseDetailsRepository.submitUserDetails(
bookingId: event.bookingId,
isForSelf: event.isForSelf,
recipientFirstName: event.recipientFirstName,
recipientLastName: event.recipientLastName,
isdCode: event.isdCode,
recipientEmail: event.recipientEmail,
recipientPhone: event.recipientPhone,
city: event.city,
country: event.country,
);
emit(PurchaseDetailsSubmitted(
response: response,
isGift: state.isGift,
profile: state.profile,
));
} catch (e) {
emit(PurchaseDetailsError(
errorMessage: e.toString(),
isGift: state.isGift,
profile: state.profile,
));
}
}
}