Flutter 与 iOS 原生项目混编配置

2020-09-21  本文已影响0人  Coder_Answer

一、Flutter 安装 『中文网』

二、在iOS项目中集成Flutter SDK

三、入过的坑:

1. 第一次加载flutter页面显示ios启动图;

需要注意的是iOS原生跳转flutter时,第一次跳转会异步渲染flutter环境,因此,FlutterViewController实例有个splashScreenView属性,防止用户在打开flutter页面时会有一个中间的空档,如果我们没有设置此属性,iOS默认将app应用的LaunchStoryboard设置为此属性的值,默认可能设置成功也可能设置失败,取决于你APP的启动图片是否是用LaunchStoryboard来设置的,所以,没有特殊情况,最好手动设置一下此属性;

let vc = CJMFlutterViewController.init()
vc.splashScreenView = {
    let view = UIView.init(frame: UIScreen.main.bounds)
    view.backgroundColor = kBackgroundColor
    return view
}()

2. FlutterViewController 内存泄露

原因出在创建channel时,造成了循环引用,导致flutterViewController不释放。可以新建一个控制器继承FlutterViewController,然后重写 didMove(toParent parent: UIViewController?) 方法

override func didMove(toParent parent: UIViewController?) {
      super.didMove(toParent: parent)
      if parent == nil {
          DispatchQueue.main.async {
              self.engine?.viewController = nil     // 必须先释放 engine 持有的 flutterViewController,否则会crash
              self.engine?.destroyContext()         // 再销毁 engine
          }
      }
  }
上一篇下一篇

猜你喜欢

热点阅读