import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/models/payment_models/pay_order_detail_resp_model.dart'; import 'package:mc_common_app/repositories/payments_repo.dart'; import 'package:mc_common_app/services/payments_service.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/utils.dart'; class PaymentVM extends ChangeNotifier { final PaymentService paymentService; final PaymentsRepo paymentRepo; PaymentVM({required this.paymentService, required this.paymentRepo}); PaymentMethods selectedPaymentMethod = PaymentMethods.mada; PaymentTypes currentPaymentType = PaymentTypes.ads; int currentAdId = -1; void updateCurrentAdId({required int id}) { currentAdId = id; } updateSelectedPaymentMethod(PaymentMethods selectedMethod) { selectedPaymentMethod = selectedMethod; notifyListeners(); } Future onContinuePressed(BuildContext context, {required PaymentTypes paymentType}) async { switch (selectedPaymentMethod) { case PaymentMethods.mada: // TODO: Handle this case. break; case PaymentMethods.visa: await onVisaCardSelected(context, paymentType); break; case PaymentMethods.applePay: // TODO: Handle this case. break; case PaymentMethods.masterCard: // TODO: Handle this case. break; case PaymentMethods.tamara: // TODO: Handle this case. break; } return; } Future placeThePayment({required int adId, required int paymentTypeId, required BuildContext context}) async { await paymentService.placeAdPayment( id: currentAdId, paymentType: paymentTypeId, onFailure: () { Utils.showToast("Payment Failed!"); }, onSuccess: () async { Utils.showLoading(context); PayOrderDetailRespModel payOrderDetailRespModel = await paymentRepo.getPayOrderDetails(paymentId: paymentTypeId, adId: currentAdId); await Future.delayed(const Duration(seconds: 2)); Utils.hideLoading(context); print("payOrderDetailRespModel: ${payOrderDetailRespModel.toString()}"); if (payOrderDetailRespModel.isPaid == null || !payOrderDetailRespModel.isPaid!) { Utils.showToast("Payment Failed!"); return; } if (payOrderDetailRespModel.isPaid != null && payOrderDetailRespModel.isPaid!) { Utils.showToast("Payment Successful"); navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard); } }, ); } Future onVisaCardSelected(BuildContext context, PaymentTypes paymentType) async { currentPaymentType = paymentType; switch (currentPaymentType) { case PaymentTypes.ads: if (currentAdId == -1) return; int paymentType = 3; await placeThePayment(adId: currentAdId, context: context, paymentTypeId: paymentType); break; case PaymentTypes.adReserve: if (currentAdId == -1) return; int paymentType = 4; await placeThePayment(adId: currentAdId, context: context, paymentTypeId: paymentType); break; case PaymentTypes.extendAds: if (currentAdId == -1) return; int paymentType = 6; await placeThePayment(adId: currentAdId, context: context, paymentTypeId: paymentType); break; case PaymentTypes.request: // TODO: Handle this case. break; case PaymentTypes.subscription: // TODO: Handle this case. break; case PaymentTypes.appointment: // TODO: Handle this case. break; } } }