You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
car_common_app/lib/view_models/payment_view_model.dart

157 lines
5.0 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/string_extensions.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<void> onContinuePressed(BuildContext context, {required PaymentTypes paymentType}) async {
switch (selectedPaymentMethod) {
case PaymentMethods.mada:
// TODO: Handle this case.
break;
case PaymentMethods.visa:
2 years ago
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<void> onAdsPaymentSuccess({required BuildContext context, required int currentAdId, required int paymentTypeId}) 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<void> placeThePayment({required int adId, required PaymentTypes paymentTypeEnum, required BuildContext context}) async {
await paymentService.placePayment(
id: currentAdId,
paymentType: paymentTypeEnum,
onFailure: () {
Utils.showToast("Payment Failed!");
switch (paymentTypeEnum) {
case PaymentTypes.subscription:
// TODO: Handle this case.
break;
case PaymentTypes.appointment:
// TODO: Handle this case.
break;
case PaymentTypes.adReserve:
// TODO: Handle this case.
break;
case PaymentTypes.ads:
// TODO: Handle this case.
break;
case PaymentTypes.request:
// TODO: Handle this case.
break;
case PaymentTypes.extendAds:
// TODO: Handle this case.
break;
}
},
onSuccess: () async {
switch (paymentTypeEnum) {
case PaymentTypes.subscription:
// TODO: Handle this case.
break;
case PaymentTypes.appointment:
// TODO: Handle this case.
break;
case PaymentTypes.adReserve:
// TODO: Handle this case.
break;
case PaymentTypes.ads:
await onAdsPaymentSuccess(context: context, paymentTypeId: paymentTypeEnum.getIdFromPaymentTypesEnum(), currentAdId: currentAdId);
break;
case PaymentTypes.request:
// TODO: Handle this case.
break;
case PaymentTypes.extendAds:
// TODO: Handle this case.
break;
}
},
);
}
Future<void> onVisaCardSelected(BuildContext context, PaymentTypes paymentType) async {
2 years ago
currentPaymentType = paymentType;
switch (currentPaymentType) {
case PaymentTypes.appointment:
break;
case PaymentTypes.ads:
if (currentAdId == -1) return;
await placeThePayment(adId: currentAdId, context: context, paymentTypeEnum: paymentType);
break;
case PaymentTypes.adReserve:
2 years ago
if (currentAdId == -1) return;
await placeThePayment(adId: currentAdId, context: context, paymentTypeEnum: paymentType);
break;
case PaymentTypes.extendAds:
if (currentAdId == -1) return;
await placeThePayment(adId: currentAdId, context: context, paymentTypeEnum: paymentType);
break;
case PaymentTypes.request:
// TODO: Handle this case.
break;
case PaymentTypes.subscription:
// TODO: Handle this case.
break;
}
}
}