MapProtocol.swift 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //
  2. // MapProtocol.swift
  3. // Runner
  4. //
  5. // Created by Groot on 2025/5/8.
  6. //
  7. import Foundation
  8. import Flutter
  9. import MapKit
  10. // 地图功能接口定义
  11. protocol MapCapability {
  12. var paramsDecodeError: FlutterError? { get set }
  13. var methodChannel: FlutterMethodChannel? { get set }
  14. var currentRegion: MKCoordinateRegion? { get set }
  15. var markers: [ATMapMarker] { get set }
  16. var polylines: [ATMapPolyline] { get set }
  17. // 处理地图添加Marker
  18. func handleMapAddMarker(args: [[String: Any]]?, result: @escaping FlutterResult)
  19. // 处理地图添加Polyline
  20. func handleMapAddPolyline(args: [String: Any]?, result: @escaping FlutterResult)
  21. // 处理地图移动
  22. func handleMapMoveCamera(args: [String: Any]?, result: @escaping FlutterResult)
  23. // 处理地图清除Marker
  24. func handleMapClearMarkers(result: @escaping FlutterResult)
  25. // 处理地图替换所有Marker
  26. func handleMapReplaceAllMarkers(args: [[String: Any]]?, result: @escaping FlutterResult)
  27. // 处理Marker点击事件
  28. func handleMarkerTap(marker: inout ATMapMarker)
  29. func handleMethodCall(_ call: FlutterMethodCall, result: @escaping FlutterResult)
  30. // 处理移动至多个点的位置,并提供设置padding距离
  31. func handleMapMoveToSuitableLocation(args: [String: Any]?, result: @escaping FlutterResult)
  32. }
  33. extension MapCapability {
  34. func handleMethodCall(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  35. guard let callMethod = MapViewChannelMethod(rawValue: call.method) else {
  36. result(FlutterMethodNotImplemented)
  37. return
  38. }
  39. switch callMethod {
  40. case .methodMapMoveCamera, .methodMapAnimateCamera:
  41. handleMapMoveCamera(args: call.arguments as? [String: Any], result: result)
  42. case .methodUpdateOrAddMarkers:
  43. handleMapAddMarker(args: call.arguments as? [[String: Any]], result: result)
  44. case .methodMapClear:
  45. handleMapClearMarkers(result: result)
  46. case .methodReplaceAllMarkers:
  47. handleMapReplaceAllMarkers(args: call.arguments as? [[String: Any]], result: result)
  48. case .methodAddPolyline:
  49. handleMapAddPolyline(args: call.arguments as? [String: Any], result: result)
  50. case .methodMapMoveToSuitableLocation:
  51. handleMapMoveToSuitableLocation(args: call.arguments as? [String: Any], result: result)
  52. default:
  53. result(FlutterMethodNotImplemented)
  54. }
  55. }
  56. }