75 lines
2.7 KiB
Swift
75 lines
2.7 KiB
Swift
//
|
||
// 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)
|
||
}
|
||
}
|
||
}
|