如何在Flutter应用程序中显示本机iOS视图?

时间:2018-11-29 20:37:34

标签: ios dart flutter flutter-dependencies flutter-plugin

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

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

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

是否可以在Flutter应用程序中显示本机iOS视图? 另外,有什么方法可以从Flutter应用程序中筛选到iOS viewController吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Flutter Platform Views在Flutter应用中显示平台本机窗口小部件。

在文档中给出的示例中,FLNativeViewFactory创建平台视图,并提供对UIView的引用。可以使用提供的UIView参考来添加iOS视图。

使用Swift

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