|
|
|
@ -2,46 +2,103 @@ import Flutter |
|
|
|
import UIKit |
|
|
|
import AMapNaviKit |
|
|
|
|
|
|
|
public class AmapServicePlugin: NSObject, FlutterPlugin { |
|
|
|
private static var channel: FlutterMethodChannel? |
|
|
|
public static func register(with registrar: FlutterPluginRegistrar) { |
|
|
|
let channel = FlutterMethodChannel(name: "com.yunqiinnovation.amap_service", binaryMessenger: registrar.messenger()) |
|
|
|
let instance = AmapServicePlugin() |
|
|
|
// 必须先设置隐私合规 |
|
|
|
DispatchQueue.main.async { |
|
|
|
// 2. API Key |
|
|
|
AMapServices.shared()?.apiKey = "aa60a03be9f6531bcc64029e60f95d03" |
|
|
|
AMapServices.shared().enableHTTPS = true |
|
|
|
// 导航SDK隐私合规(如果使用导航功能) |
|
|
|
AMapNaviManagerConfig.shared().updatePrivacyShow(.didShow, privacyInfo: .didContain) |
|
|
|
AMapNaviManagerConfig.shared().updatePrivacyAgree(.didAgree) |
|
|
|
// 3. 打印验证(调试用) |
|
|
|
print("高德SDK初始化完成") |
|
|
|
public class AmapServicePlugin: NSObject, FlutterPlugin, FlutterStreamHandler { |
|
|
|
private static var channel: FlutterMethodChannel? |
|
|
|
private var eventSink: FlutterEventSink? |
|
|
|
|
|
|
|
public static func register(with registrar: FlutterPluginRegistrar) { |
|
|
|
let methodChannel = FlutterMethodChannel( |
|
|
|
name: "com.yunqiinnovation.amap_service", |
|
|
|
binaryMessenger: registrar.messenger() |
|
|
|
) |
|
|
|
|
|
|
|
let eventChannel = FlutterEventChannel( |
|
|
|
name: "com.yunqiinnovation.amap_service/events", |
|
|
|
binaryMessenger: registrar.messenger() |
|
|
|
) |
|
|
|
|
|
|
|
let instance = AmapServicePlugin() |
|
|
|
eventChannel.setStreamHandler(instance) |
|
|
|
|
|
|
|
// 高德SDK初始化 |
|
|
|
DispatchQueue.main.async { |
|
|
|
AMapServices.shared()?.apiKey = "aa60a03be9f6531bcc64029e60f95d03" |
|
|
|
AMapServices.shared()?.enableHTTPS = true |
|
|
|
|
|
|
|
if #available(iOS 13.0, *) { |
|
|
|
AMapNaviManagerConfig.shared().updatePrivacyShow(.didShow, privacyInfo: .didContain) |
|
|
|
AMapNaviManagerConfig.shared().updatePrivacyAgree(.didAgree) |
|
|
|
} |
|
|
|
print("高德SDK初始化完成") |
|
|
|
} |
|
|
|
|
|
|
|
registrar.addMethodCallDelegate(instance, channel: methodChannel) |
|
|
|
self.channel = methodChannel |
|
|
|
} |
|
|
|
registrar.addMethodCallDelegate(instance, channel: channel) |
|
|
|
self.channel = channel |
|
|
|
} |
|
|
|
|
|
|
|
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { |
|
|
|
switch call.method { |
|
|
|
case "open": |
|
|
|
print("liwei------------------ 打开导航页面") |
|
|
|
if let args = call.arguments as? [String: Any], |
|
|
|
let startpos = args["startpos"] as? String, |
|
|
|
let endpos = args["endpos"] as? String, |
|
|
|
let ntype = args["ntype"] as? String{ |
|
|
|
print("liwei------------------ 打开导航页面1 \(startpos) \(endpos)") |
|
|
|
DispatchQueue.main.async { |
|
|
|
let navVC = AmapViewController(startpos: startpos, endpos: endpos) |
|
|
|
|
|
|
|
// MARK: - FlutterStreamHandler |
|
|
|
public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { |
|
|
|
self.eventSink = events |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
public func onCancel(withArguments arguments: Any?) -> FlutterError? { |
|
|
|
eventSink = nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: - 事件发送方法 |
|
|
|
private func sendEvent(eventName: String, data: [String: Any]) { |
|
|
|
guard let sink = eventSink else { return } |
|
|
|
let eventData: [String: Any] = [ |
|
|
|
"event": eventName, |
|
|
|
"data": data |
|
|
|
] |
|
|
|
sink(eventData) |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: - 方法处理 |
|
|
|
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { |
|
|
|
switch call.method { |
|
|
|
case "open": |
|
|
|
guard let args = call.arguments as? [String: Any], |
|
|
|
let startpos = args["startpos"] as? String, |
|
|
|
let endpos = args["endpos"] as? String, |
|
|
|
let ntype = args["ntype"] as? String else { |
|
|
|
result(FlutterError(code: "INVALID_ARGUMENT", message: "Missing arguments", details: nil)) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
print("打开导航页面: \(startpos) → \(endpos)") |
|
|
|
DispatchQueue.main.async { |
|
|
|
let navVC = AmapViewController(startpos: startpos, endpos: endpos) |
|
|
|
navVC.modalPresentationStyle = .fullScreen |
|
|
|
UIApplication.shared.keyWindow?.rootViewController?.present(navVC, animated: true) |
|
|
|
} |
|
|
|
result(nil) |
|
|
|
} else { |
|
|
|
result(FlutterError(code: "INVALID_ARGUMENT", message: "Missing 'open' map", details: nil)) |
|
|
|
|
|
|
|
case "start": |
|
|
|
guard let args = call.arguments as? [String: Any], |
|
|
|
let startpos = args["startpos"] as? String, |
|
|
|
let endpos = args["endpos"] as? String, |
|
|
|
let ntype = args["ntype"] as? String else { |
|
|
|
result(FlutterError(code: "INVALID_ARGUMENT", message: "Missing arguments", details: nil)) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// 这里添加实际导航启动逻辑 |
|
|
|
print("开始导航: \(startpos) → \(endpos), 类型: \(ntype)") |
|
|
|
sendEvent(eventName: "navigation_started", data: ["status": "success"]) |
|
|
|
result(nil) |
|
|
|
|
|
|
|
case "stop": |
|
|
|
// 这里添加停止导航逻辑 |
|
|
|
print("停止导航") |
|
|
|
sendEvent(eventName: "navigation_stopped", data: ["status": "success"]) |
|
|
|
result(nil) |
|
|
|
|
|
|
|
default: |
|
|
|
result(FlutterMethodNotImplemented) |
|
|
|
} |
|
|
|
default: |
|
|
|
result(FlutterMethodNotImplemented) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |