Rumahjo-Android-APP/lib/utils/payment/gatways/paystack_pay.dart

97 lines
2.7 KiB
Dart
Raw Permalink Normal View History

2024-09-07 00:58:50 +00:00
import 'dart:io';
import 'package:ebroker/app/app.dart';
import 'package:ebroker/app/default_app_setting.dart';
import 'package:ebroker/data/model/subscription_pacakage_model.dart';
import 'package:ebroker/utils/payment/lib/payment.dart';
import 'package:ebroker/utils/payment/lib/purchase_package.dart';
import 'package:flutter/material.dart';
import 'package:flutter_paystack/flutter_paystack.dart';
import '../../constant.dart';
import '../../helper_utils.dart';
import '../../hive_utils.dart';
import '../../ui_utils.dart';
class Paystack extends Payment {
SubscriptionPackageModel? _model;
PaystackPlugin paystackPlugin = PaystackPlugin();
void init(String publicKey) {
paystackPlugin.initialize(publicKey: publicKey);
}
@override
void onEvent(
BuildContext context, covariant PaymentStatus currentStatus) async {
if (currentStatus is Success) {
await PurchasePackage().purchase(context);
}
}
@override
void pay(BuildContext context) async {
if (_model == null) {
throw "Please setPackage";
}
isPaymentGatewayOpen = true;
Charge paystackCharge = Charge()
..amount = (_model!.price! * 100).toInt()
..email = HiveUtils.getUserDetails().email
..currency = Constant.paystackCurrency
..reference = generateReference(HiveUtils.getUserDetails().email!)
..putMetaData("username", HiveUtils.getUserDetails().name)
..putMetaData("package_id", _model!.id)
..putMetaData("user_id", HiveUtils.getUserId());
CheckoutResponse checkoutResponse = await paystackPlugin.checkout(context,
logo: SizedBox(
height: 50,
width: 50,
child: LoadAppSettings().svg(
appSettings.placeholderLogo!,
)),
charge: paystackCharge,
method: CheckoutMethod.card);
isPaymentGatewayOpen = false;
if (checkoutResponse.status) {
if (checkoutResponse.verify) {
Future.delayed(
Duration.zero,
() async {
emit(Success(message: "Success"));
// await _purchase(context);
},
);
}
} else {
Future.delayed(
Duration.zero,
() {
HelperUtils.showSnackBarMessage(
context, UiUtils.translate(context, "purchaseFailed"));
},
);
}
}
String generateReference(String email) {
late String platform;
if (Platform.isIOS) {
platform = 'I';
} else if (Platform.isAndroid) {
platform = 'A';
}
String reference =
'${platform}_${email.split("@").first}_${DateTime.now().millisecondsSinceEpoch}';
return reference;
}
@override
Payment setPackage(SubscriptionPackageModel modal) {
_model = modal;
return this;
}
}