Flutter集成iOS UIImageView时无法传递参数求助
解决Flutter向iOS原生UIKitView传递参数时args为nil的问题
问题根源
你的FLNativeViewFactory没有实现createArgsCodec()方法,Flutter端传递参数时使用了StandardMessageCodec,但iOS工厂类默认未提供对应编解码器,导致参数无法正确解析,最终args为nil。
修复步骤
在FLNativeViewFactory中添加createArgsCodec()方法,返回与Flutter端一致的StandardMessageCodec:
修改后的iOS工厂类代码:
class FLNativeViewFactory: 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 { return FLNativeView( frame: frame, viewIdentifier: viewId, arguments: args, binaryMessenger: messenger) } // 新增方法,返回对应编解码器 func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol { return FlutterStandardMessageCodec.sharedInstance() } }
可选优化:动态生成二维码
修复参数传递后,可将二维码内容替换为Flutter端传递的参数,实现动态生成:
修改FLNativeView代码:
class FLNativeView: NSObject, FlutterPlatformView { private var _view: UIView private var qrText: String = "Hello" init( frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?, binaryMessenger messenger: FlutterBinaryMessenger? ) { _view = UIView() super.init() if let args = args as? Dictionary<String, Any>, let textValue = args["text"] as? String { debugPrint(textValue) qrText = textValue } else { debugPrint("参数解析失败") } createNativeView(view: _view) } func view() -> UIView { return _view } func createNativeView(view _view: UIView){ let imageView = UIImageView() imageView.frame = CGRect(x: 0, y: 0,width: 100,height: 100) // 使用传递的参数生成二维码 imageView.image = generateQRCode(from: qrText) _view.addSubview(imageView) } func generateQRCode(from string: String) -> UIImage? { let data = string.data(using: String.Encoding.ascii) if let filter = CIFilter(name: "CIQRCodeGenerator") { filter.setValue(data, forKey: "inputMessage") let transform = CGAffineTransform(scaleX: 3, y: 3) if let output = filter.outputImage?.transformed(by: transform) { return UIImage(ciImage: output) } } return nil } }
内容的提问来源于stack exchange,提问作者BraveEvidence
相关产品推荐
相关产品推荐

