MapAmapIosPlugin.swift 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import UIKit
  2. import Flutter
  3. import AMapFoundationKit
  4. enum MapSupportedPackage: String {
  5. case traceLocation1 = "com.shishi.dingwei"
  6. }
  7. var currentPackage: MapSupportedPackage {
  8. if let bundleId = Bundle.main.bundleIdentifier {
  9. if bundleId.hasPrefix(MapSupportedPackage.traceLocation1.rawValue) {
  10. return .traceLocation1
  11. }
  12. }
  13. return .traceLocation1
  14. }
  15. @available(iOS 13.0, *)
  16. public class MapAmapIosPlugin: NSObject, FlutterPlugin {
  17. public static func register(with registrar: FlutterPluginRegistrar) {
  18. MapAmapConfigManager.setupMapKey("ed76ac32e33f33d7724936e9efbc2cd2")
  19. let factory = MapFlutterViewFactory(messenger: registrar.messenger())
  20. registrar.register(factory,
  21. withId: MapAmapViewOnlyKeyword.mapViewId,
  22. gestureRecognizersBlockingPolicy: FlutterPlatformViewGestureRecognizersBlockingPolicyWaitUntilTouchesEnded)
  23. // 注册通用方法通道
  24. CommonMethodChannelHandler.shared.setBinaryMessenger(binaryMessenger: registrar.messenger())
  25. let commonMethodChannel = FlutterMethodChannel(name: MapAmapViewOnlyKeyword.commonMethodChannelName,
  26. binaryMessenger: registrar.messenger())
  27. commonMethodChannel.setMethodCallHandler { (call, result) in
  28. CommonMethodChannelHandler.shared.handleMethodCall(call: call,
  29. result: result)
  30. }
  31. }
  32. }
  33. @available(iOS 13.0, *)
  34. class CommonMethodChannelHandler: NSObject {
  35. private var binaryMessenger: FlutterBinaryMessenger?
  36. static let shared = CommonMethodChannelHandler()
  37. private override init() {
  38. super.init()
  39. }
  40. func setBinaryMessenger(binaryMessenger: FlutterBinaryMessenger) {
  41. LocationManager.shared.initChannel(withMessenger: binaryMessenger)
  42. self.binaryMessenger = binaryMessenger
  43. }
  44. func handleMethodCall(call: FlutterMethodCall, result: @escaping FlutterResult) {
  45. handleCommonMethodCall(call: call, result: result)
  46. }
  47. private func handleCommonMethodCall(call: FlutterMethodCall, result: @escaping FlutterResult) {
  48. guard let callMethod = CommonChannelMethod(rawValue: call.method) else {
  49. result(FlutterMethodNotImplemented)
  50. return
  51. }
  52. switch callMethod {
  53. case .`init`:
  54. result(true)
  55. handleStartLocation(result: result)
  56. case .getPlatformMapName:
  57. result("map_mapkit_ios")
  58. case .startLocation:
  59. handleStartLocation(result: result)
  60. }
  61. }
  62. private func handleStartLocation(result: @escaping FlutterResult) {
  63. guard let binaryMessenger else { return }
  64. let isSuccess = LocationManager.shared.start(withMessenger: binaryMessenger)
  65. if !isSuccess {
  66. result(FlutterError(code: "LocationPermissionError", message: "Location permission not granted", details: nil))
  67. return
  68. }
  69. }
  70. }
  71. /*
  72. public class MapAmapIosPlugin: NSObject, FlutterPlugin {
  73. public static func register(with registrar: FlutterPluginRegistrar) {
  74. let channel = FlutterMethodChannel(name: "map_amap_ios", binaryMessenger: registrar.messenger())
  75. let instance = MapAmapIosPlugin()
  76. registrar.addMethodCallDelegate(instance, channel: channel)
  77. }
  78. public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  79. switch call.method {
  80. case "getPlatformVersion":
  81. result("iOS " + UIDevice.current.systemVersion)
  82. default:
  83. result(FlutterMethodNotImplemented)
  84. }
  85. }
  86. }
  87. */