第一步,创建一个平台View(继承FlutterPlatformView)
import WebKit
import Flutter
class MyWKWebView: NSObject, FlutterPlatformView {
private var webView: WKWebView
private var frame: CGRect
init(frame: CGRect, viewIdentifier id: Int64, args: Any?, messenger: FlutterBinaryMessenger) {
self.frame = frame
webView = WKWebView(frame: frame)
super.init()
if let dict = args as? Dictionary<String, Any>,
let urlString = dict["url"] as? String,
let url = URL(string: urlString) {
webView.load(URLRequest(url: url))
}
}
func view() -> UIView {
return webView
}
}
第二步,创建一个工厂类(继承FlutterPlatformViewFactory)
import UIKit
import Flutter
class MyWKWebViewFactory: NSObject, FlutterPlatformViewFactory {
private var messenger: FlutterBinaryMessenger
init(messenger: FlutterBinaryMessenger) {
self.messenger = messenger
super.init()
}
func create(
withFrame frame: CGRect,
viewIdentifier viewId: Int64,
arguments args: Any?
) -> FlutterPlatformView {
print("aaa111", args)
return MyWKWebView(frame: frame, viewIdentifier: viewId, args: args, messenger: messenger)
}
// 必须实现这个方法,create才能接受参数
func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
return FlutterStandardMessageCodec.sharedInstance()
}
}
里面有一个坑,就是Flutter给UIView传递参数时,需要实现createArgsCodec方法,否则无法接受到参数
参考文章:Flutter插件开发踩坑记