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}); PaymentMethodsEnum selectedPaymentMethod = PaymentMethodsEnum.mada; PaymentTypesEnum currentPaymentType = PaymentTypesEnum.ads; int currentAdId = -1; void updateCurrentAdId({required int id}) { currentAdId = id; } updateSelectedPaymentMethod(PaymentMethodsEnum selectedMethod) { selectedPaymentMethod = selectedMethod; notifyListeners(); } Future onContinuePressed(BuildContext context) async { switch (selectedPaymentMethod) { case PaymentMethodsEnum.mada: // TODO: Handle this case. break; case PaymentMethodsEnum.visa: await onVisaCardSelected(context); break; case PaymentMethodsEnum.applePay: // TODO: Handle this case. break; case PaymentMethodsEnum.masterCard: // TODO: Handle this case. break; case PaymentMethodsEnum.tamara: // TODO: Handle this case. break; } return; } Future onVisaCardSelected(BuildContext context) async { switch (currentPaymentType) { case PaymentTypesEnum.subscription: // TODO: Handle this case. break; case PaymentTypesEnum.appointment: // TODO: Handle this case. break; case PaymentTypesEnum.ads: if (currentAdId == -1) return; int paymentType = 3; await paymentService.placeAdPayment( id: currentAdId, paymentType: paymentType, onFailure: () { Utils.showToast("Payment Failed!"); }, onSuccess: () async { Utils.showLoading(context); PayOrderDetailRespModel payOrderDetailRespModel = await paymentRepo.getPayOrderDetails(paymentId: paymentType, adId: 3); await Future.delayed(Duration(seconds: 2)); Utils.hideLoading(context); if (payOrderDetailRespModel.isPaid == null || !payOrderDetailRespModel.isPaid!) { Utils.showToast("Payment Failed!"); return; } if (payOrderDetailRespModel.isPaid != null && payOrderDetailRespModel.isPaid!) { Utils.showToast("Payment Successfully Completed!"); navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard); } }, ); break; case PaymentTypesEnum.adReserve: // TODO: Handle this case. break; case PaymentTypesEnum.request: // TODO: Handle this case. break; } } }