MapAmapIosPlugin.swift 3.5 KB

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