MapDataCommunicationProtocol.swift 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // MapDataCommunicationProtocol.swift
  3. // map_amap_ios
  4. //
  5. // Created by 诺诺诺的言 on 2025/7/22.
  6. //
  7. import Foundation
  8. import MapKit
  9. import Flutter
  10. import MAMapKit
  11. // 地图功能接口定义
  12. protocol MapCapability {
  13. var paramsDecodeError: FlutterError? { get set }
  14. var methodChannel: FlutterMethodChannel? { get set }
  15. var currentRegion: MACoordinateRegion? { get set }
  16. var markers: [ATMapMarker] { get set }
  17. var polylines: [ATMapPolyline] { get set }
  18. // 处理地图添加Marker
  19. func handleMapAddMarker(args: [[String: Any]]?, result: @escaping FlutterResult)
  20. // 处理地图添加Polyline
  21. func handleMapAddPolyline(args: [String: Any]?, result: @escaping FlutterResult)
  22. ///移除地图里面指定的Polyline
  23. func handleMapRemovePolyline(args: [String: Any]?, result: @escaping FlutterResult)
  24. // 处理地图移动
  25. func handleMapMoveCamera(args: [String: Any]?, result: @escaping FlutterResult)
  26. // 处理地图清除Marker
  27. func handleMapClearMarkers(result: @escaping FlutterResult)
  28. // 处理地图清除所有的Polyline
  29. func handleMapClearAllPolyline(result: @escaping FlutterResult)
  30. // 处理地图替换所有Marker
  31. func handleMapReplaceAllMarkers(args: [[String: Any]]?, result: @escaping FlutterResult)
  32. // 处理Marker点击事件
  33. func handleMarkerTap(marker: inout ATMapMarker)
  34. func handleMethodCall(_ call: FlutterMethodCall, result: @escaping FlutterResult)
  35. ///处理移动至多个点的位置,并提供设置padding距离
  36. func handleMapMoveToSuitableLocation(args: [String: Any]?, result: @escaping FlutterResult)
  37. ///清除指定标记物
  38. func handleMapRemovemarker(args: [String: Any]?, result: @escaping FlutterResult)
  39. ///禁用或开启地图所有交互
  40. func handleMapInteractionEnabled(args: [String: Any]?, result: @escaping FlutterResult)
  41. ///显示或隐藏地图logo
  42. func handleMapLogoVisible(args: [String: Any]?, result: @escaping FlutterResult)
  43. }
  44. extension MapCapability {
  45. func handleMethodCall(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  46. guard let callMethod = MapAmapDataChannelKeyword(rawValue: call.method) else {
  47. result(FlutterMethodNotImplemented)
  48. return
  49. }
  50. switch callMethod {
  51. case .methodMapMoveCamera, .methodMapAnimateCamera:
  52. handleMapMoveCamera(args: call.arguments as? [String: Any], result: result)
  53. case .methodUpdateOrAddMarkers:
  54. handleMapAddMarker(args: call.arguments as? [[String: Any]], result: result)
  55. case .methodMapClear:
  56. handleMapClearMarkers(result: result)
  57. case .methodReplaceAllMarkers:
  58. handleMapReplaceAllMarkers(args: call.arguments as? [[String: Any]], result: result)
  59. case .methodAddPolyline:
  60. handleMapAddPolyline(args: call.arguments as? [String: Any], result: result)
  61. case .methodRemovePolyline:
  62. handleMapRemovePolyline(args: call.arguments as? [String: Any], result: result)
  63. case .methodMapMoveToSuitableLocation:
  64. handleMapMoveToSuitableLocation(args: call.arguments as? [String: Any], result: result)
  65. case .methodMarkerRemoveMarker:
  66. handleMapRemovemarker(args: call.arguments as? [String: Any], result: result)
  67. case .methodMapInteractionEnabled:
  68. handleMapInteractionEnabled(args: call.arguments as? [String: Any], result: result)
  69. case .methodMapLogoVisible:
  70. handleMapLogoVisible(args: call.arguments as? [String: Any], result: result)
  71. case .methodMapClearAllPolylines:
  72. handleMapClearAllPolyline(result: result)
  73. default:
  74. result(FlutterMethodNotImplemented)
  75. }
  76. }
  77. }