|
|
@@ -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
|