ios - 如何在 Flutter 应用程序中显示原生 iOS 视图?
问题描述
我目前正在做一个项目,我需要实现一个为 Android 和 iOS 编写的图形框架;但是,我正在使用 Flutter/Dart 编写应用程序,到目前为止,我找不到在 Flutter 应用程序中显示本机 iOS 视图的任何方法。我找到了一个为 android 编写的模块,声称可以做到这一点(博客文章),我很好奇是否有人知道任何可以为 iOS 实现这一目标的模块或技术。
我知道 Flutter 具有 ChannelMethod 功能,但这不是一个解决方案——至少在我的理解中,ChannelMethods 可以传递特定于平台的消息,但这并不能帮助我在 Flutter 应用程序中显示特定于平台的插件。
我还想到在 Flutter 中硬编码一个等效的图形界面,然后使用 ChannelMethods 传递所需的数据,但这并不理想,因为似乎并非我需要从插件中获得的所有数据都很容易获得。我真的在寻找一种以某种方式在 Flutter 中显示 UIView 的方法。
有什么方法可以在 Flutter 应用程序中显示原生 iOS 视图?或者,有什么方法可以从 Flutter 应用程序转到 iOS viewController?
解决方案
您可以使用Flutter Platform Views在 Flutter 应用程序中显示平台原生小部件。
在文档中给出的示例中,FLNativeViewFactory
创建平台视图,并提供对UIView
. 可以使用提供的UIView
参考添加 iOS 视图。
使用斯威夫特
class FLNativeView: NSObject, FlutterPlatformView {
init(
frame: CGRect,
viewIdentifier viewId: Int64,
arguments args: Any?,
binaryMessenger messenger: FlutterBinaryMessenger?
){
_view = UIView()
super.init()
// iOS views can be added here
}
}
使用 Objective-C
@implementation FLNativeView {
UIView *_view;
}
- (instancetype)initWithFrame:(CGRect)frame
viewIdentifier:(int64_t)viewId
arguments:(id _Nullable)args
binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger {
if (self = [super init]) {
_view = [[UIView alloc] init];
}
// iOS views can be added here
return self;
}
@end
推荐阅读
- c# - Xamarin MessagingCenter:发送一次,接收多次
- javascript - ReactJS Redux 调度调用了两次
- typescript - 即使声明了 Typescript 也找不到属性
- java - 添加按钮时场景颜色变为白色
- python - Pyinstaller exe 文件不适用于 selenium
- kubernetes - Kubernetes API 服务器无法启动/看起来无法连接到 DNS 服务器
- symfony - API 平台 - 没有为资源类型定义标识符
- php - MySQL GROUP_CONCAT(DISTINCT ...) 忽略数据
- python - 使用带有 groupby 和 group-specific bins 的 pandas cut 函数
- c++ - 如何将qml a textField的文本转换为float和int