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.
70 lines
2.0 KiB
70 lines
2.0 KiB
import Flutter
|
|
import UIKit
|
|
|
|
@objc(FLNativeViewFactory)
|
|
public class FLNativeViewFactory: NSObject, FlutterPlatformViewFactory {
|
|
private let messenger: FlutterBinaryMessenger
|
|
|
|
public init(messenger: FlutterBinaryMessenger) {
|
|
self.messenger = messenger
|
|
super.init()
|
|
}
|
|
|
|
public func create(
|
|
withFrame frame: CGRect,
|
|
viewIdentifier viewId: Int64,
|
|
arguments args: Any?
|
|
) -> FlutterPlatformView {
|
|
return FLNativeView(frame: frame, viewIdentifier: viewId, arguments: args, binaryMessenger: messenger)
|
|
}
|
|
|
|
public func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
|
|
return FlutterStandardMessageCodec.sharedInstance()
|
|
}
|
|
}
|
|
|
|
public class FLNativeView: NSObject, FlutterPlatformView {
|
|
private let viewInstance: PlayerView
|
|
private let methodChannel: FlutterMethodChannel
|
|
|
|
public init(
|
|
frame: CGRect,
|
|
viewIdentifier viewId: Int64,
|
|
arguments args: Any?,
|
|
binaryMessenger messenger: FlutterBinaryMessenger
|
|
) {
|
|
viewInstance = PlayerView()
|
|
methodChannel = FlutterMethodChannel(name: "native_plugin/native_view_\(viewId)", binaryMessenger: messenger)
|
|
super.init()
|
|
methodChannel.setMethodCallHandler { [weak self] call, result in
|
|
self?.onMethodCall(call, result: result)
|
|
}
|
|
}
|
|
|
|
public func view() -> UIView {
|
|
return viewInstance
|
|
}
|
|
|
|
private func onMethodCall(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
|
switch call.method {
|
|
case "getInternalView":
|
|
let ptr = Unmanaged.passUnretained(viewInstance).toOpaque()
|
|
let viewId = UInt64(UInt(bitPattern: ptr))
|
|
result(NSNumber(value: viewId))
|
|
|
|
case "updateContent":
|
|
let data = call.arguments as? [String: Any]
|
|
let lang = data?["lang"] as? String
|
|
let cn = data?["cn"] as? String
|
|
let en = data?["en"] as? String
|
|
DispatchQueue.main.async { [weak self] in
|
|
self?.viewInstance.update(withLang: lang, cn: cn, en: en)
|
|
}
|
|
result(nil)
|
|
|
|
default:
|
|
result(NSNumber(value: 0))
|
|
}
|
|
}
|
|
}
|
|
|
|
|