Files
flutterApp/packages/usb_camera_android/ios/Classes/UsbCameraAndroidPlugin.swift

75 lines
2.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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)
}
}
}