123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import Flutter
- import UIKit
- import MercadoPagoSDK
- public class SwiftFlutterMercadopagoPlugin: NSObject, FlutterPlugin, PXLifeCycleProtocol {
- var pendingResult: FlutterResult?
- public static func register(with registrar: FlutterPluginRegistrar) {
- let channel = FlutterMethodChannel(name: "flutter_mercadopago", binaryMessenger: registrar.messenger())
-
- let instance = SwiftFlutterMercadopagoPlugin()
- registrar.addMethodCallDelegate(instance, channel: channel)
- }
- public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
- if (call.method == "getPlatformVersion") {
- result("iOS " + UIDevice.current.systemVersion)
- } else if (call.method == "MercadoPagoStartForPayment") {
- let args = call.arguments as! Dictionary<String, String>
- let publicKey = args["publicKey"] ?? ""
- let preferenceId = args["preferenceId"] ?? ""
-
- pendingResult = result
-
- startCheckout(publicKey: publicKey, preferenceId: preferenceId)
- } else {
- handleNavigationBar(isMercadoPagoActive: false)
- result(FlutterMethodNotImplemented)
- }
- }
- private func startCheckout(publicKey: String, preferenceId: String) {
- let checkout = MercadoPagoCheckout.init(builder: MercadoPagoCheckoutBuilder.init(publicKey: publicKey, preferenceId: preferenceId))
-
- handleNavigationBar(isMercadoPagoActive: true)
- checkout.start(navigationController: controller(), lifeCycleProtocol: self)
- }
-
- public func cancelCheckout() -> (() -> Void)? {
- return {
- self.pendingResult!("-1")
-
- self.handleNavigationBar(isMercadoPagoActive: false)
- }
- }
-
- public func finishCheckout() -> ((PXResult?) -> Void)? {
- return ({(_ result: PXResult?) in
- self.pendingResult!(result?.getPaymentId() ?? "")
- self.handleNavigationBar(isMercadoPagoActive: false)
- })
- }
-
- private func handleNavigationBar(isMercadoPagoActive: Bool) {
- if (isMercadoPagoActive) {
- controller().navigationBar.isHidden = false
- } else {
- controller().popToRootViewController(animated: true)
- controller().navigationBar.isHidden = true
- }
- }
-
- private func controller() -> UINavigationController {
- let rootViewController = UIApplication.shared.keyWindow?.rootViewController
- return rootViewController as! UINavigationController
- }
- }
|