MapProtocol.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. func initialize(args: [String: Any]?, result: @escaping FlutterResult)
  18. // 处理地图添加Marker
  19. func handleMapAddMarker(args: [[String: Any]]?, result: @escaping FlutterResult)
  20. // 处理地图添加Polyline
  21. func handleMapAddPolyline(args: [String: Any]?, result: @escaping FlutterResult)
  22. // 处理地图移动
  23. func handleMapMoveCamera(args: [String: Any]?, result: @escaping FlutterResult)
  24. // 处理地图清除Marker
  25. func handleMapClearMarkers(result: @escaping FlutterResult)
  26. // 处理地图替换所有Marker
  27. func handleMapReplaceAllMarkers(args: [[String: Any]]?, result: @escaping FlutterResult)
  28. // 处理Marker点击事件
  29. func handleMarkerTap(marker: inout ATMapMarker)
  30. func handleMethodCall(_ call: FlutterMethodCall, result: @escaping FlutterResult)
  31. }
  32. extension MapCapability {
  33. func handleMethodCall(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  34. guard let callMethod = ChannelMethods(rawValue: call.method) else {
  35. result(FlutterMethodNotImplemented)
  36. return
  37. }
  38. switch callMethod {
  39. case .`init`:
  40. initialize(args: call.arguments as? [String: Any], result: result)
  41. case .methodMapMoveCamera, .methodMapAnimateCamera:
  42. handleMapMoveCamera(args: call.arguments as? [String: Any], result: result)
  43. case .methodUpdateOrAddMarkers:
  44. handleMapAddMarker(args: call.arguments as? [[String: Any]], result: result)
  45. case .methodMapClear:
  46. handleMapClearMarkers(result: result)
  47. case .methodReplaceAllMarkers:
  48. handleMapReplaceAllMarkers(args: call.arguments as? [[String: Any]], result: result)
  49. case .methodAddPolyline:
  50. handleMapAddPolyline(args: call.arguments as? [String: Any], result: result)
  51. default:
  52. result(FlutterMethodNotImplemented)
  53. }
  54. }
  55. }