【问题标题】:How to show native iOS views in a Flutter application?如何在 Flutter 应用程序中显示原生 iOS 视图?
【发布时间】:2019-05-01 23:56:45
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 2019-06-30
    • 2019-07-30
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多