首页 > 解决方案 > 如何在 Flutter 应用程序中显示原生 iOS 视图?

问题描述

我目前正在做一个项目,我需要实现一个为 Android 和 iOS 编写的图形框架;但是,我正在使用 Flutter/Dart 编写应用程序,到目前为止,我找不到在 Flutter 应用程序中显示本机 iOS 视图的任何方法。我找到了一个为 android 编写的模块,声称可以做到这一点(博客文章),我很好奇是否有人知道任何可以为 iOS 实现这一目标的模块或技术。

我知道 Flutter 具有 ChannelMethod 功能,但这不是一个解决方案——至少在我的理解中,ChannelMethods 可以传递特定于平台的消息,但这并不能帮助我在 Flutter 应用程序中显示特定于平台的插件。

我还想到在 Flutter 中硬编码一个等效的图形界面,然后使用 ChannelMethods 传递所需的数据,但这并不理想,因为似乎并非我需要从插件中获得的所有数据都很容易获得。我真的在寻找一种以某种方式在 Flutter 中显示 UIView 的方法。

有什么方法可以在 Flutter 应用程序中显示原生 iOS 视图?或者,有什么方法可以从 Flutter 应用程序转到 iOS viewController?

标签: iosdartflutterflutter-dependenciesflutter-plugin

解决方案


您可以使用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

推荐阅读