You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.9 KiB

import Flutter
import UIKit
import AMapNaviKit
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
}
// 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)
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)
}
}
}