SwiftFlutterMercadopagoPlugin.swift 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import Flutter
  2. import UIKit
  3. import MercadoPagoSDK
  4. public class SwiftFlutterMercadopagoPlugin: NSObject, FlutterPlugin, PXLifeCycleProtocol {
  5. var pendingResult: FlutterResult?
  6. public static func register(with registrar: FlutterPluginRegistrar) {
  7. let channel = FlutterMethodChannel(name: "flutter_mercadopago", binaryMessenger: registrar.messenger())
  8. let instance = SwiftFlutterMercadopagoPlugin()
  9. registrar.addMethodCallDelegate(instance, channel: channel)
  10. }
  11. public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  12. if (call.method == "getPlatformVersion") {
  13. result("iOS " + UIDevice.current.systemVersion)
  14. } else if (call.method == "MercadoPagoStartForPayment") {
  15. let args = call.arguments as! Dictionary<String, String>
  16. let publicKey = args["publicKey"] ?? ""
  17. let preferenceId = args["preferenceId"] ?? ""
  18. pendingResult = result
  19. startCheckout(publicKey: publicKey, preferenceId: preferenceId)
  20. } else {
  21. handleNavigationBar(isMercadoPagoActive: false)
  22. result(FlutterMethodNotImplemented)
  23. }
  24. }
  25. private func startCheckout(publicKey: String, preferenceId: String) {
  26. let checkout = MercadoPagoCheckout.init(builder: MercadoPagoCheckoutBuilder.init(publicKey: publicKey, preferenceId: preferenceId))
  27. handleNavigationBar(isMercadoPagoActive: true)
  28. checkout.start(navigationController: controller(), lifeCycleProtocol: self)
  29. }
  30. public func cancelCheckout() -> (() -> Void)? {
  31. return {
  32. self.pendingResult!("-1")
  33. self.handleNavigationBar(isMercadoPagoActive: false)
  34. }
  35. }
  36. public func finishCheckout() -> ((PXResult?) -> Void)? {
  37. return ({(_ result: PXResult?) in
  38. self.pendingResult!(result?.getPaymentId() ?? "")
  39. self.handleNavigationBar(isMercadoPagoActive: false)
  40. })
  41. }
  42. private func handleNavigationBar(isMercadoPagoActive: Bool) {
  43. if (isMercadoPagoActive) {
  44. controller().navigationBar.isHidden = false
  45. } else {
  46. controller().popToRootViewController(animated: true)
  47. controller().navigationBar.isHidden = true
  48. }
  49. }
  50. private func controller() -> UINavigationController {
  51. let rootViewController = UIApplication.shared.keyWindow?.rootViewController
  52. return rootViewController as! UINavigationController
  53. }
  54. }