103 lines
3.0 KiB
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,
|
|
));
|
|
}
|
|
}
|
|
} |