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 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 } }