// // UsbCameraAndroidPlugin.swift // usb_camera_android // // Flutter iOS 插件入口:注册 MethodChannel / EventChannel / PlatformView, // 通道名与 Android 端完全一致,上层 Dart 无需区分平台。 // import Flutter import UIKit public class UsbCameraAndroidPlugin: NSObject, FlutterPlugin, FlutterStreamHandler { private static let METHOD_CHANNEL = "com.maibu.usb_camera_android/methods" private static let EVENT_CHANNEL = "com.maibu.usb_camera_android/events" private static let VIEW_TYPE = "com.maibu.usb_camera_android/preview" private let engine = UsbCameraEngine() public static func register(with registrar: FlutterPluginRegistrar) { let instance = UsbCameraAndroidPlugin() let methodChannel = FlutterMethodChannel( name: METHOD_CHANNEL, binaryMessenger: registrar.messenger()) registrar.addMethodCallDelegate(instance, channel: methodChannel) let eventChannel = FlutterEventChannel( name: EVENT_CHANNEL, binaryMessenger: registrar.messenger()) eventChannel.setStreamHandler(instance) registrar.register(UsbCameraViewFactory(engine: instance.engine), withId: VIEW_TYPE) instance.engine.startMonitoring() } // MARK: - FlutterStreamHandler(转发给 engine) public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { return engine.onListen(withArguments: arguments, eventSink: events) } public func onCancel(withArguments arguments: Any?) -> FlutterError? { return engine.onCancel(withArguments: arguments) } // MARK: - MethodCallHandler public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "isSupported": result(engine.isSupported()) case "getDeviceList": result(engine.getDeviceList()) case "getSupportedResolutions": result(engine.getSupportedResolutions()) case "getPreviewSize": result(engine.getPreviewSize()) case "open": let args = call.arguments as? [String: Any] engine.open(deviceId: args?["deviceId"] as? String, resolution: args?["resolution"] as? String, result: result) case "close": engine.close(result: result) case "setResolution": let args = call.arguments as? [String: Any] engine.setResolution(args?["resolution"] as? String, result: result) default: result(FlutterMethodNotImplemented) } } }