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 = "6144a636c24dc9f2e1e57f7597849cf7" 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) } } }