我正在使用Platform View在Flutter应用程序中集成原生视图。我成功地集成了Android视图,但我在iOS视图中遇到了问题。我完全按照Flutter docs中的说明:Hosting native iOS views in your Flutter app with Platform Views,但我的参数不知何故无法传递给Swift native。
dart 代码:
UiKitView(
viewType: '<platform-view-type>',
layoutDirection: ui_import.TextDirection.ltr,
creationParams: {"num": 1, "text": "example"}, // my argument
creationParamsCodec: StandardMessageCodec(),
)
Swift代码,FLNativeView.swift
:
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( // <---- breakpoint here, but args parameter is nil
frame: frame,
viewIdentifier: viewId,
arguments: args,
binaryMessenger: messenger)
}
}
我的AppDelegate.swift
:
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
weak var registrar = self.registrar(forPlugin: "plugin-name")
let factory = FLNativeViewFactory(messenger: registrar!.messenger())
self.registrar(forPlugin: "<plugin-name>")!.register(
factory,
withId: "<platform-view-type>")
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
我的flutter doctor
:
[✓] Flutter (Channel stable, 3.7.8, on macOS 13.4 22F66 darwin-arm64, locale en-VN)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.1)
[✓] VS Code (version 1.78.2)
[✓] Connected device (3 available)
[✓] HTTP Host Availability
P/s:我必须在原生视图上工作的原因是Flutter的PDF功能不像Kotlin/Swift那样“完整”。
我完全按照Flutter文档中的指示,也查看了其他Flutter帖子,Android工作,但iOS不。
1条答案
按热度按时间mrfwxfqh1#
该死的,我想出来了!问题是缺乏文件。这个问题在GitHub上出现了:https://github.com/flutter/flutter/issues/28124。在我的
FLNativeViewFactory
中,添加以下函数:然后它工作!