BASE: Update Icons & Name Of The App.

This commit is contained in:
2025-12-04 10:23:59 +05:00
parent b04050384d
commit e602782edd
228 changed files with 34364 additions and 7905 deletions

View File

@@ -17,7 +17,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_paypal/flutter_paypal.dart';
import 'package:flutter_stripe/flutter_stripe.dart';
import 'package:get/get.dart';
import 'package:get/get.dart' hide Trans;
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
import 'package:razorpay_flutter/razorpay_flutter.dart';
@@ -108,7 +108,9 @@ class CartController extends GetxController {
cartItem.addAll(event);
if (cartItem.isNotEmpty) {
await FireStoreUtils.getVendorById(cartItem.first.vendorID.toString()).then((value) {
await FireStoreUtils.getVendorById(
cartItem.first.vendorID.toString(),
).then((value) {
if (value != null) {
vendorModel.value = value;
}
@@ -116,9 +118,14 @@ class CartController extends GetxController {
}
calculatePrice();
});
selectedFoodType.value = Preferences.getString(Preferences.foodDeliveryType, defaultValue: "Delivery");
selectedFoodType.value = Preferences.getString(
Preferences.foodDeliveryType,
defaultValue: "Delivery",
);
await FireStoreUtils.getUserProfile(FireStoreUtils.getCurrentUid()).then((value) {
await FireStoreUtils.getUserProfile(FireStoreUtils.getCurrentUid()).then((
value,
) {
if (value != null) {
userModel.value = value;
}
@@ -127,16 +134,22 @@ class CartController extends GetxController {
await FireStoreUtils.getDeliveryCharge().then((value) {
if (value != null) {
deliveryChargeModel.value = value;
print("===> Delivery Charge Model: ${deliveryChargeModel.value.toJson()}");
print(
"===> Delivery Charge Model: ${deliveryChargeModel.value.toJson()}",
);
calculatePrice();
}
});
await FireStoreUtils.getAllVendorPublicCoupons(vendorModel.value.id.toString()).then((value) {
await FireStoreUtils.getAllVendorPublicCoupons(
vendorModel.value.id.toString(),
).then((value) {
couponList.value = value;
});
await FireStoreUtils.getAllVendorCoupons(vendorModel.value.id.toString()).then((value) {
await FireStoreUtils.getAllVendorCoupons(
vendorModel.value.id.toString(),
).then((value) {
allCouponList.value = value;
});
}
@@ -150,8 +163,11 @@ class CartController extends GetxController {
totalAmount.value = 0.0;
if (cartItem.isNotEmpty) {
if (Constant.sectionConstantModel!.serviceTypeFlag == "ecommerce-service") {
deliveryCharges.value = double.parse(Constant.sectionConstantModel!.delivery_charge ?? "0");
if (Constant.sectionConstantModel!.serviceTypeFlag ==
"ecommerce-service") {
deliveryCharges.value = double.parse(
Constant.sectionConstantModel!.delivery_charge ?? "0",
);
} else {
if (selectedFoodType.value == "Delivery") {
totalDistance.value = double.parse(
@@ -162,26 +178,50 @@ class CartController extends GetxController {
lng2: vendorModel.value.longitude.toString(),
),
);
if (vendorModel.value.isSelfDelivery == true && Constant.isSelfDeliveryFeature == true) {
if (vendorModel.value.isSelfDelivery == true &&
Constant.isSelfDeliveryFeature == true) {
deliveryCharges.value = 0.0;
} else if (deliveryChargeModel.value.vendorCanModify == false) {
if (totalDistance.value > deliveryChargeModel.value.minimumDeliveryChargesWithinKm!) {
deliveryCharges.value = totalDistance.value * deliveryChargeModel.value.deliveryChargesPerKm!;
if (totalDistance.value >
deliveryChargeModel.value.minimumDeliveryChargesWithinKm!) {
deliveryCharges.value =
totalDistance.value *
deliveryChargeModel.value.deliveryChargesPerKm!;
} else {
deliveryCharges.value = (deliveryChargeModel.value.minimumDeliveryCharges)!.toDouble();
deliveryCharges.value =
(deliveryChargeModel.value.minimumDeliveryCharges)!
.toDouble();
}
} else {
if (vendorModel.value.deliveryCharge != null) {
if (totalDistance.value > vendorModel.value.deliveryCharge!.minimumDeliveryChargesWithinKm!) {
deliveryCharges.value = (totalDistance.value * vendorModel.value.deliveryCharge!.deliveryChargesPerKm!).toDouble();
if (totalDistance.value >
vendorModel
.value
.deliveryCharge!
.minimumDeliveryChargesWithinKm!) {
deliveryCharges.value =
(totalDistance.value *
vendorModel
.value
.deliveryCharge!
.deliveryChargesPerKm!)
.toDouble();
} else {
deliveryCharges.value = vendorModel.value.deliveryCharge!.minimumDeliveryCharges!.toDouble();
deliveryCharges.value =
vendorModel.value.deliveryCharge!.minimumDeliveryCharges!
.toDouble();
}
} else {
if (totalDistance.value > deliveryChargeModel.value.minimumDeliveryChargesWithinKm!) {
deliveryCharges.value = (totalDistance.value * deliveryChargeModel.value.deliveryChargesPerKm!).toDouble();
if (totalDistance.value >
deliveryChargeModel.value.minimumDeliveryChargesWithinKm!) {
deliveryCharges.value =
(totalDistance.value *
deliveryChargeModel.value.deliveryChargesPerKm!)
.toDouble();
} else {
deliveryCharges.value = deliveryChargeModel.value.minimumDeliveryCharges!.toDouble();
deliveryCharges.value =
deliveryChargeModel.value.minimumDeliveryCharges!
.toDouble();
}
}
}
@@ -195,21 +235,29 @@ class CartController extends GetxController {
if (double.parse(element.discountPrice.toString()) <= 0) {
subTotal.value =
subTotal.value +
double.parse(element.price.toString()) * double.parse(element.quantity.toString()) +
(double.parse(element.extrasPrice.toString()) * double.parse(element.quantity.toString()));
double.parse(element.price.toString()) *
double.parse(element.quantity.toString()) +
(double.parse(element.extrasPrice.toString()) *
double.parse(element.quantity.toString()));
} else {
subTotal.value =
subTotal.value +
double.parse(element.discountPrice.toString()) * double.parse(element.quantity.toString()) +
(double.parse(element.extrasPrice.toString()) * double.parse(element.quantity.toString()));
double.parse(element.discountPrice.toString()) *
double.parse(element.quantity.toString()) +
(double.parse(element.extrasPrice.toString()) *
double.parse(element.quantity.toString()));
}
}
if (selectedCouponModel.value.id != null) {
couponAmount.value = Constant.calculateDiscount(amount: subTotal.value.toString(), offerModel: selectedCouponModel.value);
couponAmount.value = Constant.calculateDiscount(
amount: subTotal.value.toString(),
offerModel: selectedCouponModel.value,
);
}
if (vendorModel.value.specialDiscountEnable == true && Constant.specialDiscountOffer == true) {
if (vendorModel.value.specialDiscountEnable == true &&
Constant.specialDiscountOffer == true) {
final now = DateTime.now();
var day = DateFormat('EEEE', 'en_US').format(now);
var date = DateFormat('dd-MM-yyyy').format(now);
@@ -218,13 +266,20 @@ class CartController extends GetxController {
if (element.timeslot!.isNotEmpty) {
for (var element in element.timeslot!) {
if (element.discountType == "delivery") {
var start = DateFormat("dd-MM-yyyy HH:mm").parse("$date ${element.from}");
var end = DateFormat("dd-MM-yyyy HH:mm").parse("$date ${element.to}");
var start = DateFormat(
"dd-MM-yyyy HH:mm",
).parse("$date ${element.from}");
var end = DateFormat(
"dd-MM-yyyy HH:mm",
).parse("$date ${element.to}");
if (isCurrentDateInRange(start, end)) {
specialDiscount.value = double.parse(element.discount.toString());
specialDiscount.value = double.parse(
element.discount.toString(),
);
specialType.value = element.type.toString();
if (element.type == "percentage") {
specialDiscountAmount.value = subTotal * specialDiscount.value / 100;
specialDiscountAmount.value =
subTotal * specialDiscount.value / 100;
} else {
specialDiscountAmount.value = specialDiscount.value;
}
@@ -240,10 +295,23 @@ class CartController extends GetxController {
}
for (var element in Constant.taxList) {
taxAmount.value = taxAmount.value + Constant.calculateTax(amount: (subTotal.value - couponAmount.value - specialDiscountAmount.value).toString(), taxModel: element);
taxAmount.value =
taxAmount.value +
Constant.calculateTax(
amount:
(subTotal.value -
couponAmount.value -
specialDiscountAmount.value)
.toString(),
taxModel: element,
);
}
totalAmount.value = (subTotal.value - couponAmount.value - specialDiscountAmount.value) + taxAmount.value + deliveryCharges.value + deliveryTips.value;
totalAmount.value =
(subTotal.value - couponAmount.value - specialDiscountAmount.value) +
taxAmount.value +
deliveryCharges.value +
deliveryTips.value;
getCashback();
}
@@ -264,17 +332,31 @@ class CartController extends GetxController {
if (startDate == null || endDate == null) continue;
final withinDateRange = startDate.toDate().isBefore(now) && endDate.toDate().isAfter(now);
final meetsMinAmount = orderTotal >= (cashback.minimumPurchaseAmount ?? 0);
final withinDateRange =
startDate.toDate().isBefore(now) && endDate.toDate().isAfter(now);
final meetsMinAmount =
orderTotal >= (cashback.minimumPurchaseAmount ?? 0);
final allPayment = cashback.allPayment ?? false;
final paymentMatch = allPayment || (cashback.paymentMethods ?? []).contains(paymentMethod);
final paymentMatch =
allPayment ||
(cashback.paymentMethods ?? []).contains(paymentMethod);
final allCustomer = cashback.allCustomer ?? false;
final customerMatch = allCustomer || (cashback.customerIds ?? []).contains(FireStoreUtils.getCurrentUid());
final customerMatch =
allCustomer ||
(cashback.customerIds ?? []).contains(
FireStoreUtils.getCurrentUid(),
);
final redeemData = await FireStoreUtils.getRedeemedCashbacks(cashback.id ?? '');
final redeemData = await FireStoreUtils.getRedeemedCashbacks(
cashback.id ?? '',
);
final underLimit = redeemData.length < (cashback.redeemLimit ?? 0);
if (withinDateRange && meetsMinAmount && paymentMatch && customerMatch && underLimit) {
if (withinDateRange &&
meetsMinAmount &&
paymentMatch &&
customerMatch &&
underLimit) {
eligibleCashbacks.add(cashback);
}
}
@@ -312,7 +394,11 @@ class CartController extends GetxController {
}
}
Future<void> addToCart({required CartProductModel cartProductModel, required bool isIncrement, required int quantity}) async {
Future<void> addToCart({
required CartProductModel cartProductModel,
required bool isIncrement,
required int quantity,
}) async {
if (isIncrement) {
cartProvider.addToCart(Get.context!, cartProductModel, quantity);
} else {
@@ -325,10 +411,13 @@ class CartController extends GetxController {
Future<void> placeOrder() async {
if (selectedPaymentMethod.value == PaymentGateway.wallet.name) {
if (double.parse(userModel.value.walletAmount.toString()) >= totalAmount.value) {
if (double.parse(userModel.value.walletAmount.toString()) >=
totalAmount.value) {
setOrder();
} else {
ShowToastDialog.showToast("You don't have sufficient wallet balance to place order".tr());
ShowToastDialog.showToast(
"You don't have sufficient wallet balance to place order".tr(),
);
}
} else {
setOrder();
@@ -338,11 +427,19 @@ class CartController extends GetxController {
Future<void> setOrder() async {
ShowToastDialog.showLoader("Please wait...".tr());
if ((Constant.isSubscriptionModelApplied == true || Constant.sectionConstantModel?.adminCommision?.isEnabled == true) && vendorModel.value.subscriptionPlan != null) {
await FireStoreUtils.getVendorById(vendorModel.value.id!).then((vender) async {
if (vender?.subscriptionTotalOrders == '0' || vender?.subscriptionTotalOrders == null) {
if ((Constant.isSubscriptionModelApplied == true ||
Constant.sectionConstantModel?.adminCommision?.isEnabled == true) &&
vendorModel.value.subscriptionPlan != null) {
await FireStoreUtils.getVendorById(vendorModel.value.id!).then((
vender,
) async {
if (vender?.subscriptionTotalOrders == '0' ||
vender?.subscriptionTotalOrders == null) {
ShowToastDialog.closeLoader();
ShowToastDialog.showToast("This vendor has reached their maximum order capacity. Please select a different vendor or try again later.".tr());
ShowToastDialog.showToast(
"This vendor has reached their maximum order capacity. Please select a different vendor or try again later."
.tr(),
);
return;
}
});
@@ -356,7 +453,11 @@ class CartController extends GetxController {
tempProduc.add(tempCart);
}
Map<String, dynamic> specialDiscountMap = {'special_discount': specialDiscountAmount.value, 'special_discount_label': specialDiscount.value, 'specialType': specialType.value};
Map<String, dynamic> specialDiscountMap = {
'special_discount': specialDiscountAmount.value,
'special_discount_label': specialDiscount.value,
'specialType': specialType.value,
};
OrderModel orderModel = OrderModel();
orderModel.id = Constant.getUuid();
@@ -391,8 +492,12 @@ class CartController extends GetxController {
orderModel.notes = reMarkController.value.text;
orderModel.takeAway = selectedFoodType.value == "Delivery" ? false : true;
orderModel.createdAt = Timestamp.now();
orderModel.scheduleTime = deliveryType.value == "schedule" ? Timestamp.fromDate(scheduleDateTime.value) : null;
orderModel.cashback = bestCashback.value.id == null ? null : bestCashback.value;
orderModel.scheduleTime =
deliveryType.value == "schedule"
? Timestamp.fromDate(scheduleDateTime.value)
: null;
orderModel.cashback =
bestCashback.value.id == null ? null : bestCashback.value;
if (selectedPaymentMethod.value == PaymentGateway.wallet.name) {
WalletTransactionModel transactionModel = WalletTransactionModel(
id: Constant.getUuid(),
@@ -407,33 +512,57 @@ class CartController extends GetxController {
paymentStatus: "success".tr(),
);
await FireStoreUtils.setWalletTransaction(transactionModel).then((value) async {
await FireStoreUtils.setWalletTransaction(transactionModel).then((
value,
) async {
if (value == true) {
await FireStoreUtils.updateUserWallet(amount: "-${totalAmount.value.toString()}", userId: FireStoreUtils.getCurrentUid()).then((value) {});
await FireStoreUtils.updateUserWallet(
amount: "-${totalAmount.value.toString()}",
userId: FireStoreUtils.getCurrentUid(),
).then((value) {});
}
});
}
for (int i = 0; i < tempProduc.length; i++) {
await FireStoreUtils.getProductById(tempProduc[i].id!.split('~').first).then((value) async {
await FireStoreUtils.getProductById(
tempProduc[i].id!.split('~').first,
).then((value) async {
ProductModel? productModel = value;
if (tempProduc[i].variantInfo != null) {
if (productModel!.itemAttribute != null) {
for (int j = 0; j < productModel.itemAttribute!.variants!.length; j++) {
if (productModel.itemAttribute!.variants![j].variantId == tempProduc[i].id!.split('~').last) {
if (productModel.itemAttribute!.variants![j].variantQuantity != "-1") {
productModel.itemAttribute!.variants![j].variantQuantity = (int.parse(productModel.itemAttribute!.variants![j].variantQuantity.toString()) - tempProduc[i].quantity!).toString();
for (
int j = 0;
j < productModel.itemAttribute!.variants!.length;
j++
) {
if (productModel.itemAttribute!.variants![j].variantId ==
tempProduc[i].id!.split('~').last) {
if (productModel.itemAttribute!.variants![j].variantQuantity !=
"-1") {
productModel.itemAttribute!.variants![j].variantQuantity =
(int.parse(
productModel
.itemAttribute!
.variants![j]
.variantQuantity
.toString(),
) -
tempProduc[i].quantity!)
.toString();
}
}
}
} else {
if (productModel.quantity != -1) {
productModel.quantity = (productModel.quantity! - tempProduc[i].quantity!);
productModel.quantity =
(productModel.quantity! - tempProduc[i].quantity!);
}
}
} else {
if (productModel!.quantity != -1) {
productModel.quantity = (productModel.quantity! - tempProduc[i].quantity!);
productModel.quantity =
(productModel.quantity! - tempProduc[i].quantity!);
}
}
@@ -451,18 +580,31 @@ class CartController extends GetxController {
await FireStoreUtils.setCashbackRedeemModel(cashbackRedeemModel);
}
await FireStoreUtils.setOrder(orderModel).then((value) async {
await FireStoreUtils.getUserProfile(orderModel.vendor!.author.toString()).then((value) async {
await FireStoreUtils.getUserProfile(
orderModel.vendor!.author.toString(),
).then((value) async {
if (value != null) {
if (orderModel.scheduleTime != null) {
await SendNotification.sendFcmMessage(Constant.scheduleOrder, value.fcmToken ?? '', {});
await SendNotification.sendFcmMessage(
Constant.scheduleOrder,
value.fcmToken ?? '',
{},
);
} else {
await SendNotification.sendFcmMessage(Constant.newOrderPlaced, value.fcmToken ?? '', {});
await SendNotification.sendFcmMessage(
Constant.newOrderPlaced,
value.fcmToken ?? '',
{},
);
}
}
});
await Constant.sendOrderEmail(orderModel: orderModel);
ShowToastDialog.closeLoader();
Get.off(const OrderPlacingScreen(), arguments: {"orderModel": orderModel});
Get.off(
const OrderPlacingScreen(),
arguments: {"orderModel": orderModel},
);
});
}
@@ -483,19 +625,45 @@ class CartController extends GetxController {
Future<void> getPaymentSettings() async {
await FireStoreUtils.getPaymentSettingsData().then((value) {
stripeModel.value = StripeModel.fromJson(jsonDecode(Preferences.getString(Preferences.stripeSettings)));
payPalModel.value = PayPalModel.fromJson(jsonDecode(Preferences.getString(Preferences.paypalSettings)));
payStackModel.value = PayStackModel.fromJson(jsonDecode(Preferences.getString(Preferences.payStack)));
mercadoPagoModel.value = MercadoPagoModel.fromJson(jsonDecode(Preferences.getString(Preferences.mercadoPago)));
flutterWaveModel.value = FlutterWaveModel.fromJson(jsonDecode(Preferences.getString(Preferences.flutterWave)));
paytmModel.value = PaytmModel.fromJson(jsonDecode(Preferences.getString(Preferences.paytmSettings)));
payFastModel.value = PayFastModel.fromJson(jsonDecode(Preferences.getString(Preferences.payFastSettings)));
razorPayModel.value = RazorPayModel.fromJson(jsonDecode(Preferences.getString(Preferences.razorpaySettings)));
midTransModel.value = MidTrans.fromJson(jsonDecode(Preferences.getString(Preferences.midTransSettings)));
orangeMoneyModel.value = OrangeMoney.fromJson(jsonDecode(Preferences.getString(Preferences.orangeMoneySettings)));
xenditModel.value = Xendit.fromJson(jsonDecode(Preferences.getString(Preferences.xenditSettings)));
walletSettingModel.value = WalletSettingModel.fromJson(jsonDecode(Preferences.getString(Preferences.walletSettings)));
cashOnDeliverySettingModel.value = CodSettingModel.fromJson(jsonDecode(Preferences.getString(Preferences.codSettings)));
stripeModel.value = StripeModel.fromJson(
jsonDecode(Preferences.getString(Preferences.stripeSettings)),
);
payPalModel.value = PayPalModel.fromJson(
jsonDecode(Preferences.getString(Preferences.paypalSettings)),
);
payStackModel.value = PayStackModel.fromJson(
jsonDecode(Preferences.getString(Preferences.payStack)),
);
mercadoPagoModel.value = MercadoPagoModel.fromJson(
jsonDecode(Preferences.getString(Preferences.mercadoPago)),
);
flutterWaveModel.value = FlutterWaveModel.fromJson(
jsonDecode(Preferences.getString(Preferences.flutterWave)),
);
paytmModel.value = PaytmModel.fromJson(
jsonDecode(Preferences.getString(Preferences.paytmSettings)),
);
payFastModel.value = PayFastModel.fromJson(
jsonDecode(Preferences.getString(Preferences.payFastSettings)),
);
razorPayModel.value = RazorPayModel.fromJson(
jsonDecode(Preferences.getString(Preferences.razorpaySettings)),
);
midTransModel.value = MidTrans.fromJson(
jsonDecode(Preferences.getString(Preferences.midTransSettings)),
);
orangeMoneyModel.value = OrangeMoney.fromJson(
jsonDecode(Preferences.getString(Preferences.orangeMoneySettings)),
);
xenditModel.value = Xendit.fromJson(
jsonDecode(Preferences.getString(Preferences.xenditSettings)),
);
walletSettingModel.value = WalletSettingModel.fromJson(
jsonDecode(Preferences.getString(Preferences.walletSettings)),
);
cashOnDeliverySettingModel.value = CodSettingModel.fromJson(
jsonDecode(Preferences.getString(Preferences.codSettings)),
);
if (walletSettingModel.value.isEnabled == true) {
selectedPaymentMethod.value = PaymentGateway.wallet.name;
@@ -537,20 +705,32 @@ class CartController extends GetxController {
Future<void> stripeMakePayment({required String amount}) async {
log(double.parse(amount).toStringAsFixed(0));
try {
Map<String, dynamic>? paymentIntentData = await createStripeIntent(amount: amount);
Map<String, dynamic>? paymentIntentData = await createStripeIntent(
amount: amount,
);
log("stripe Responce====>$paymentIntentData");
if (paymentIntentData!.containsKey("error")) {
Get.back();
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
ShowToastDialog.showToast(
"Something went wrong, please contact admin.".tr(),
);
} else {
await Stripe.instance.initPaymentSheet(
paymentSheetParameters: SetupPaymentSheetParameters(
paymentIntentClientSecret: paymentIntentData['client_secret'],
allowsDelayedPaymentMethods: false,
googlePay: const PaymentSheetGooglePay(merchantCountryCode: 'US', testEnv: true, currencyCode: "USD"),
googlePay: const PaymentSheetGooglePay(
merchantCountryCode: 'US',
testEnv: true,
currencyCode: "USD",
),
customFlow: true,
style: ThemeMode.system,
appearance: PaymentSheetAppearance(colors: PaymentSheetAppearanceColors(primary: AppThemeData.primary300)),
appearance: PaymentSheetAppearance(
colors: PaymentSheetAppearanceColors(
primary: AppThemeData.primary300,
),
),
merchantDisplayName: 'GoRide',
),
);
@@ -596,7 +776,10 @@ class CartController extends GetxController {
var response = await http.post(
Uri.parse('https://api.stripe.com/v1/payment_intents'),
body: body,
headers: {'Authorization': 'Bearer $stripeSecret', 'Content-Type': 'application/x-www-form-urlencoded'},
headers: {
'Authorization': 'Bearer $stripeSecret',
'Content-Type': 'application/x-www-form-urlencoded',
},
);
return jsonDecode(response.body);
@@ -606,8 +789,14 @@ class CartController extends GetxController {
}
//mercadoo
Future<Null> mercadoPagoMakePayment({required BuildContext context, required String amount}) async {
final headers = {'Authorization': 'Bearer ${mercadoPagoModel.value.accessToken}', 'Content-Type': 'application/json'};
Future<Null> mercadoPagoMakePayment({
required BuildContext context,
required String amount,
}) async {
final headers = {
'Authorization': 'Bearer ${mercadoPagoModel.value.accessToken}',
'Content-Type': 'application/json',
};
final body = jsonEncode({
"items": [
@@ -620,12 +809,20 @@ class CartController extends GetxController {
},
],
"payer": {"email": userModel.value.email},
"back_urls": {"failure": "${Constant.globalUrl}payment/failure", "pending": "${Constant.globalUrl}payment/pending", "success": "${Constant.globalUrl}payment/success"},
"back_urls": {
"failure": "${Constant.globalUrl}payment/failure",
"pending": "${Constant.globalUrl}payment/pending",
"success": "${Constant.globalUrl}payment/success",
},
"auto_return": "approved",
// Automatically return after payment is approved
});
final response = await http.post(Uri.parse("https://api.mercadopago.com/checkout/preferences"), headers: headers, body: body);
final response = await http.post(
Uri.parse("https://api.mercadopago.com/checkout/preferences"),
headers: headers,
body: body,
);
if (response.statusCode == 200 || response.statusCode == 201) {
final data = jsonDecode(response.body);
@@ -683,9 +880,12 @@ class CartController extends GetxController {
///PayStack Payment Method
Future<void> payStackPayment(String totalAmount) async {
await PayStackURLGen.payStackURLGen(amount: (double.parse(totalAmount) * 100).toString(), currency: "ZAR", secretKey: payStackModel.value.secretKey.toString(), userModel: userModel.value).then((
value,
) async {
await PayStackURLGen.payStackURLGen(
amount: (double.parse(totalAmount) * 100).toString(),
currency: "ZAR",
secretKey: payStackModel.value.secretKey.toString(),
userModel: userModel.value,
).then((value) async {
if (value != null) {
PayStackUrlModel payStackModel0 = value;
Get.to(
@@ -705,15 +905,23 @@ class CartController extends GetxController {
}
});
} else {
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
ShowToastDialog.showToast(
"Something went wrong, please contact admin.".tr(),
);
}
});
}
//flutter wave Payment Method
Future<Null> flutterWaveInitiatePayment({required BuildContext context, required String amount}) async {
Future<Null> flutterWaveInitiatePayment({
required BuildContext context,
required String amount,
}) async {
final url = Uri.parse('https://api.flutterwave.com/v3/payments');
final headers = {'Authorization': 'Bearer ${flutterWaveModel.value.secretKey}', 'Content-Type': 'application/json'};
final headers = {
'Authorization': 'Bearer ${flutterWaveModel.value.secretKey}',
'Content-Type': 'application/json',
};
final body = jsonEncode({
"tx_ref": _ref,
@@ -726,14 +934,19 @@ class CartController extends GetxController {
"phonenumber": userModel.value.phoneNumber, // Add a real phone number
"name": userModel.value.fullName(), // Add a real customer name
},
"customizations": {"title": "Payment for Services", "description": "Payment for XYZ services"},
"customizations": {
"title": "Payment for Services",
"description": "Payment for XYZ services",
},
});
final response = await http.post(url, headers: headers, body: body);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
Get.to(MercadoPagoScreen(initialURl: data['data']['link']))!.then((value) {
Get.to(MercadoPagoScreen(initialURl: data['data']['link']))!.then((
value,
) {
if (value) {
ShowToastDialog.showToast("Payment Successful!!".tr());
placeOrder();
@@ -762,8 +975,14 @@ class CartController extends GetxController {
// payFast
void payFastPayment({required BuildContext context, required String amount}) {
PayStackURLGen.getPayHTML(payFastSettingData: payFastModel.value, amount: amount.toString(), userModel: userModel.value).then((String? value) async {
bool isDone = await Get.to(PayFastScreen(htmlData: value!, payFastSettingData: payFastModel.value));
PayStackURLGen.getPayHTML(
payFastSettingData: payFastModel.value,
amount: amount.toString(),
userModel: userModel.value,
).then((String? value) async {
bool isDone = await Get.to(
PayFastScreen(htmlData: value!, payFastSettingData: payFastModel.value),
);
if (isDone) {
Get.back();
ShowToastDialog.showToast("Payment successfully".tr());
@@ -783,26 +1002,50 @@ class CartController extends GetxController {
final response = await http.post(
Uri.parse(getChecksum),
headers: {},
body: {"mid": paytmModel.value.paytmMID.toString(), "order_id": orderId, "key_secret": paytmModel.value.pAYTMMERCHANTKEY.toString()},
body: {
"mid": paytmModel.value.paytmMID.toString(),
"order_id": orderId,
"key_secret": paytmModel.value.pAYTMMERCHANTKEY.toString(),
},
);
final data = jsonDecode(response.body);
await verifyCheckSum(checkSum: data["code"], amount: amount, orderId: orderId).then((value) {
await verifyCheckSum(
checkSum: data["code"],
amount: amount,
orderId: orderId,
).then((value) {
initiatePayment(amount: amount, orderId: orderId).then((value) {
String callback = "";
if (paytmModel.value.isSandboxEnabled == true) {
callback = "${callback}https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
callback =
"${callback}https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
} else {
callback = "${callback}https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
callback =
"${callback}https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
}
GetPaymentTxtTokenModel result = value;
startTransaction(context, txnTokenBy: result.body.txnToken ?? '', orderId: orderId, amount: amount, callBackURL: callback, isStaging: paytmModel.value.isSandboxEnabled);
startTransaction(
context,
txnTokenBy: result.body.txnToken ?? '',
orderId: orderId,
amount: amount,
callBackURL: callback,
isStaging: paytmModel.value.isSandboxEnabled,
);
});
});
}
Future<void> startTransaction(context, {required String txnTokenBy, required orderId, required double amount, required callBackURL, required isStaging}) async {
Future<void> startTransaction(
context, {
required String txnTokenBy,
required orderId,
required double amount,
required callBackURL,
required isStaging,
}) async {
// try {
// var response = AllInOneSdk.startTransaction(
// paytmModel.value.paytmMID.toString(),
@@ -838,24 +1081,38 @@ class CartController extends GetxController {
// }
}
Future verifyCheckSum({required String checkSum, required double amount, required orderId}) async {
Future verifyCheckSum({
required String checkSum,
required double amount,
required orderId,
}) async {
String getChecksum = "${Constant.globalUrl}payments/validatechecksum";
final response = await http.post(
Uri.parse(getChecksum),
headers: {},
body: {"mid": paytmModel.value.paytmMID.toString(), "order_id": orderId, "key_secret": paytmModel.value.pAYTMMERCHANTKEY.toString(), "checksum_value": checkSum},
body: {
"mid": paytmModel.value.paytmMID.toString(),
"order_id": orderId,
"key_secret": paytmModel.value.pAYTMMERCHANTKEY.toString(),
"checksum_value": checkSum,
},
);
final data = jsonDecode(response.body);
return data['status'];
}
Future<GetPaymentTxtTokenModel> initiatePayment({required double amount, required orderId}) async {
Future<GetPaymentTxtTokenModel> initiatePayment({
required double amount,
required orderId,
}) async {
String initiateURL = "${Constant.globalUrl}payments/initiatepaytmpayment";
String callback = "";
if (paytmModel.value.isSandboxEnabled == true) {
callback = "${callback}https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
callback =
"${callback}https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
} else {
callback = "${callback}https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
callback =
"${callback}https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
}
final response = await http.post(
Uri.parse(initiateURL),
@@ -873,9 +1130,12 @@ class CartController extends GetxController {
);
log(response.body);
final data = jsonDecode(response.body);
if (data["body"]["txnToken"] == null || data["body"]["txnToken"].toString().isEmpty) {
if (data["body"]["txnToken"] == null ||
data["body"]["txnToken"].toString().isEmpty) {
Get.back();
ShowToastDialog.showToast("something went wrong, please contact admin.".tr());
ShowToastDialog.showToast(
"something went wrong, please contact admin.".tr(),
);
}
return GetPaymentTxtTokenModel.fromJson(data);
}
@@ -893,7 +1153,10 @@ class CartController extends GetxController {
'description': 'wallet Topup',
'retry': {'enabled': true, 'max_count': 1},
'send_sms_hash': true,
'prefill': {'contact': userModel.value.phoneNumber, 'email': userModel.value.email},
'prefill': {
'contact': userModel.value.phoneNumber,
'email': userModel.value.email,
},
'external': {
'wallets': ['paytm'],
},
@@ -927,7 +1190,10 @@ class CartController extends GetxController {
}
//Midtrans payment
Future<void> midtransMakePayment({required String amount, required BuildContext context}) async {
Future<void> midtransMakePayment({
required String amount,
required BuildContext context,
}) async {
await createPaymentLink(amount: amount).then((url) {
ShowToastDialog.closeLoader();
if (url != '') {
@@ -945,15 +1211,30 @@ class CartController extends GetxController {
Future<String> createPaymentLink({required var amount}) async {
var ordersId = const Uuid().v1();
final url = Uri.parse(midTransModel.value.isSandbox! ? 'https://api.sandbox.midtrans.com/v1/payment-links' : 'https://api.midtrans.com/v1/payment-links');
final url = Uri.parse(
midTransModel.value.isSandbox!
? 'https://api.sandbox.midtrans.com/v1/payment-links'
: 'https://api.midtrans.com/v1/payment-links',
);
final response = await http.post(
url,
headers: {'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': generateBasicAuthHeader(midTransModel.value.serverKey!)},
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': generateBasicAuthHeader(
midTransModel.value.serverKey!,
),
},
body: jsonEncode({
'transaction_details': {'order_id': ordersId, 'gross_amount': double.parse(amount.toString()).toInt()},
'transaction_details': {
'order_id': ordersId,
'gross_amount': double.parse(amount.toString()).toInt(),
},
'usage_limit': 2,
"callbacks": {"finish": "https://www.google.com?merchant_order_id=$ordersId"},
"callbacks": {
"finish": "https://www.google.com?merchant_order_id=$ordersId",
},
}),
);
@@ -961,7 +1242,9 @@ class CartController extends GetxController {
final responseData = jsonDecode(response.body);
return responseData['payment_url'];
} else {
ShowToastDialog.showToast("something went wrong, please contact admin.".tr());
ShowToastDialog.showToast(
"something went wrong, please contact admin.".tr(),
);
return '';
}
}
@@ -978,13 +1261,30 @@ class CartController extends GetxController {
static String orderId = '';
static String amount = '';
Future<void> orangeMakePayment({required String amount, required BuildContext context}) async {
Future<void> orangeMakePayment({
required String amount,
required BuildContext context,
}) async {
reset();
var id = const Uuid().v4();
var paymentURL = await fetchToken(context: context, orderId: id, amount: amount, currency: 'USD');
var paymentURL = await fetchToken(
context: context,
orderId: id,
amount: amount,
currency: 'USD',
);
ShowToastDialog.closeLoader();
if (paymentURL.toString() != '') {
Get.to(() => OrangeMoneyScreen(initialURl: paymentURL, accessToken: accessToken, amount: amount, orangePay: orangeMoneyModel.value, orderId: orderId, payToken: payToken))!.then((value) {
Get.to(
() => OrangeMoneyScreen(
initialURl: paymentURL,
accessToken: accessToken,
amount: amount,
orangePay: orangeMoneyModel.value,
orderId: orderId,
payToken: payToken,
),
)!.then((value) {
if (value == true) {
ShowToastDialog.showToast("Payment Successful!!".tr());
placeOrder();
@@ -996,13 +1296,22 @@ class CartController extends GetxController {
}
}
Future fetchToken({required String orderId, required String currency, required BuildContext context, required String amount}) async {
Future fetchToken({
required String orderId,
required String currency,
required BuildContext context,
required String amount,
}) async {
String apiUrl = 'https://api.orange.com/oauth/v3/token';
Map<String, String> requestBody = {'grant_type': 'client_credentials'};
var response = await http.post(
Uri.parse(apiUrl),
headers: <String, String>{'Authorization': "Basic ${orangeMoneyModel.value.auth!}", 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'},
headers: <String, String>{
'Authorization': "Basic ${orangeMoneyModel.value.auth!}",
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
},
body: requestBody,
);
@@ -1013,17 +1322,32 @@ class CartController extends GetxController {
accessToken = responseData['access_token'];
// ignore: use_build_context_synchronously
return await webpayment(context: context, amountData: amount, currency: currency, orderIdData: orderId);
return await webpayment(
context: context,
amountData: amount,
currency: currency,
orderIdData: orderId,
);
} else {
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
ShowToastDialog.showToast(
"Something went wrong, please contact admin.".tr(),
);
return '';
}
}
Future webpayment({required String orderIdData, required BuildContext context, required String currency, required String amountData}) async {
Future webpayment({
required String orderIdData,
required BuildContext context,
required String currency,
required String amountData,
}) async {
orderId = orderIdData;
amount = amountData;
String apiUrl = orangeMoneyModel.value.isSandbox! == true ? 'https://api.orange.com/orange-money-webpay/dev/v1/webpayment' : 'https://api.orange.com/orange-money-webpay/cm/v1/webpayment';
String apiUrl =
orangeMoneyModel.value.isSandbox! == true
? 'https://api.orange.com/orange-money-webpay/dev/v1/webpayment'
: 'https://api.orange.com/orange-money-webpay/cm/v1/webpayment';
Map<String, String> requestBody = {
"merchant_key": orangeMoneyModel.value.merchantKey ?? '',
"currency": orangeMoneyModel.value.isSandbox == true ? "OUV" : currency,
@@ -1038,7 +1362,11 @@ class CartController extends GetxController {
var response = await http.post(
Uri.parse(apiUrl),
headers: <String, String>{'Authorization': 'Bearer $accessToken', 'Content-Type': 'application/json', 'Accept': 'application/json'},
headers: <String, String>{
'Authorization': 'Bearer $accessToken',
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: json.encode(requestBody),
);
@@ -1052,7 +1380,9 @@ class CartController extends GetxController {
return '';
}
} else {
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
ShowToastDialog.showToast(
"Something went wrong, please contact admin.".tr(),
);
return '';
}
}
@@ -1069,7 +1399,13 @@ class CartController extends GetxController {
await createXenditInvoice(amount: amount).then((model) {
ShowToastDialog.closeLoader();
if (model.id != null) {
Get.to(() => XenditScreen(initialURl: model.invoiceUrl ?? '', transId: model.id ?? '', apiKey: xenditModel.value.apiKey!.toString()))!.then((value) {
Get.to(
() => XenditScreen(
initialURl: model.invoiceUrl ?? '',
transId: model.id ?? '',
apiKey: xenditModel.value.apiKey!.toString(),
),
)!.then((value) {
if (value == true) {
ShowToastDialog.showToast("Payment Successful!!".tr());
placeOrder();
@@ -1086,7 +1422,9 @@ class CartController extends GetxController {
const url = 'https://api.xendit.co/v2/invoices';
var headers = {
'Content-Type': 'application/json',
'Authorization': generateBasicAuthHeader(xenditModel.value.apiKey!.toString()),
'Authorization': generateBasicAuthHeader(
xenditModel.value.apiKey!.toString(),
),
// 'Cookie': '__cf_bm=yERkrx3xDITyFGiou0bbKY1bi7xEwovHNwxV1vCNbVc-1724155511-1.0.1.1-jekyYQmPCwY6vIJ524K0V6_CEw6O.dAwOmQnHtwmaXO_MfTrdnmZMka0KZvjukQgXu5B.K_6FJm47SGOPeWviQ',
};
@@ -1099,7 +1437,11 @@ class CartController extends GetxController {
});
try {
final response = await http.post(Uri.parse(url), headers: headers, body: body);
final response = await http.post(
Uri.parse(url),
headers: headers,
body: body,
);
if (response.statusCode == 200 || response.statusCode == 201) {
XenditModel model = XenditModel.fromJson(jsonDecode(response.body));