Jelajahi Sumber

add:添加清除制定的线的功能。

“HeShaoZe” 4 bulan lalu
induk
melakukan
19e5c578f2

+ 2 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Model/ChannelMethods.swift

@@ -29,4 +29,6 @@ enum ChannelMethods: String, CaseIterable {
     
     // polyline
     case methodAddPolyline = "polyline#addPolyline"
+    ///删除指定的路径
+    case methodRemovePolyline = "polyline#removePolyline"
 }

+ 5 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Model/MapProtocol.swift

@@ -27,6 +27,9 @@ protocol MapCapability {
     // 处理地图添加Polyline
     func handleMapAddPolyline(args: [String: Any]?, result: @escaping FlutterResult)
     
+    ///移除地图里面指定的Polyline
+    func handleMapRemovePolyline(args: [String: Any]?, result: @escaping FlutterResult)
+    
     // 处理地图移动
     func handleMapMoveCamera(args: [String: Any]?, result: @escaping FlutterResult)
     
@@ -66,6 +69,8 @@ extension MapCapability {
             handleMapReplaceAllMarkers(args: call.arguments as? [[String: Any]], result: result)
         case .methodAddPolyline:
             handleMapAddPolyline(args: call.arguments as? [String: Any], result: result)
+        case .methodRemovePolyline:
+            handleMapRemovePolyline(args: call.arguments as? [String: Any], result: result)
         case .methodMapMoveToSuitableLocation:
             handleMapMoveToSuitableLocation(args: call.arguments as? [String: Any], result: result)
         case .methodMarkerRemoveMarker:

+ 2 - 0
plugins/map_mapkit_ios/ios/Classes/MapView/Model/MapViewChannelMethod.swift

@@ -25,6 +25,8 @@ enum MapViewChannelMethod: String, CaseIterable {
     
     // polyline
     case methodAddPolyline = "polyline#addPolyline"
+    ///删除指定的路径
+    case methodRemovePolyline = "polyline#removePolyline"
 }
 
 enum CommonChannelMethod: String {

+ 31 - 14
plugins/map_mapkit_ios/ios/Classes/MapView/ViewModel/MapViewModel.swift

@@ -13,11 +13,11 @@ import SwiftUI
 import Combine
 
 class MapViewModel: NSObject, ObservableObject, MapCapability {
-
+    
     var paramsDecodeError: FlutterError? = FlutterError(code: "InvalidArguments", message: "Invalid arguments", details: nil)
-
+    
     var methodChannel: FlutterMethodChannel?
-
+    
     @Published var currentRegion: MKCoordinateRegion?
     
     // 地图Marker
@@ -25,10 +25,10 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
     
     // 地图Polyline
     @Published var polylines: [ATMapPolyline] = []
-
+    
     //移动至多个点的位置,并提供设置padding距离
     @Published var suitableLocation: [ATMapPolyline] = []
-
+    
     // 处理地图移动
     func handleMapMoveCamera(args: [String: Any]?, result: @escaping FlutterResult) {
         guard let args = args, let cameraPosition = ATMapCameraPosition.fromJson(json: args) else {
@@ -43,7 +43,7 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
         currentRegion = MKCoordinateRegion(center: center, span: span)
         result(nil)
     }
-
+    
     // 处理地图添加Marker
     func handleMapAddMarker(args: [[String: Any]]?, result: @escaping FlutterResult) {
         guard let args = args, let newMarkers = [ATMapMarker].fromJson(json: args) else {
@@ -60,13 +60,13 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
         self.markers = Array(markerDict.values)
         result(nil)
     }
-
+    
     // 处理地图清除Marker
     func handleMapClearMarkers(result: @escaping FlutterResult) {
         markers = []
         result(nil)
     }
-
+    
     // 处理地图替换所有Marker
     func handleMapReplaceAllMarkers(args: [[String: Any]]?, result: @escaping FlutterResult) {
         defer {
@@ -79,13 +79,13 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
         
         self.markers = markers
     }
-
+    
     // 处理Marker点击事件
     func handleMarkerTap(marker: inout ATMapMarker) {
         toggleMarkerSelected(marker: &marker)
         methodChannel?.invokeMethod(MapViewChannelMethod.methodMarkerOnTap.rawValue, arguments: marker.toJson())
     }
-
+    
     // 处理地图添加Polyline
     func handleMapAddPolyline(args: [String: Any]?, result: @escaping FlutterResult) {
         guard let args = args, let polyline = ATMapPolyline.fromJson(json: args) else {
@@ -93,7 +93,7 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
             return
         }
         polylines.append(polyline)
-
+        
         result(nil)
     }
     
@@ -106,7 +106,7 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
         suitableLocation.append(polyline)
         result(nil);
     }
-        
+    
     ///清除指定标记物
     func handleMapRemovemarker(args: [String : Any]?, result: @escaping FlutterResult) {
         defer {
@@ -118,10 +118,27 @@ class MapViewModel: NSObject, ObservableObject, MapCapability {
         }
         
         // 使用标识符找到要移除的标记物并从数组中删除
-        if let index = markers.firstIndex(where: { $0.id == markerItem.id }) {
-            markers.remove(at: index)
+        
+        DispatchQueue.main.async{
+            if let index = self.markers.firstIndex(where: { $0.id == markerItem.id }) {
+                self.markers.remove(at: index)
+            }
         }
     }
+    
+    ///清除制定的线
+    func handleMapRemovePolyline(args: [String : Any]?, result: @escaping FlutterResult) {
+        guard let args = args, let polyline = ATMapPolyline.fromJson(json: args) else {
+            result(paramsDecodeError)
+            return
+        }
+        DispatchQueue.main.async {
+            if let index = self.polylines.firstIndex(where: { $0.lineId == polyline.lineId }) {
+                self.polylines.remove(at: index)
+            }
+        }
+        result(nil)
+    }
 }
 
 // Propertie Action