iOS和Flutter混合开发
本文最后更新于:2 年前
参考官方文档:
https://flutter.cn/docs/development/add-to-app
https://flutter.dev/docs/development/add-to-app/
一、创建并集成
- 使用命令行为原生工程创建
flutter
模块
1 |
|
- 使用
CocoaPods
集成源码
1 |
|
- 使用命令行打包成
framework
集成
1 |
|
命令行中加入--cocoapods
参数会输出Flutter.podspec
替代Flutter.framework
,该podspec
中为官方提供的Flutter.framework
的集成地址,方便用户集成
二、iOS和Flutter混合开发交互方案
1、路由管理
- 官方方法
FlutterEngine
是官方提供的管理类,推荐在App
启动时初始化,由于该类占用内存较多,所以推荐只创建一次,每个Flutter
页面都使用同一个FlutterEngine
初始化
FlutterViewController
是官方提供的控制器,集成UIViewController
,推荐使用如下方法初始化
1 |
|
注:官方文档中的隐式
FlutterEngine
创建FlutterViewController
的方法会产生新的FlutterEngine
,不推荐使用
使用推荐方法创建的FlutterViewController
默认加载的Flutter
端main.dart
中的main()
方法,所以会直接展示对应绑定的页面
针对如上流程,当原生打开指定的Flutter
页面时,初始化FlutterViewController
后,使用pushRoute
方法定位到对应的页面
1 |
|
注:
pushRoute
方法定位页面后,main.dart
中的main()
方法绑定的初始页面依然存在,所以在需要退出Flutter
页面时,直接从原生关闭
相连多个Flutter
页面之间建议仍然使用同一个controller
,减少内存占用,便于整体状态(例如:黑暗模式等)维护
- 第三方插件
flutter_boost
flutter_boost
是咸鱼团队开发的针对flutter
混合开发的插件,能像原生一样直接打开相应的flutter
页面,并且集成了对原生App
前后台状态的监听和原生控制器的生命周期的监听,功能较为完善,混合开发推荐使用
1 |
|
2、FlutterMethodChannel通信
FlutterMethodChannel
是官方提供的原生和Flutter
通信的工具,支持双向通信,通过该实例对象,触发方法,推荐使用单例持久化
通过FlutterMethodChannel
可以实现对原生容器的修改,包括打开原生页面等
1 |
|
三、flutter_boost
参考代码
详细内容见github
项目源码