内容提要
本文介绍闲鱼Flutter Boost混合开发框架(1.12.13版)的接入与原理:采用共享引擎模式,由Native容器通过消息驱动Flutter页面容器,实现两者同步。Android端接入包括创建Flutter Module、源码或aar集成、添加依赖与初始化,并演示打开Flutter页面、在Flutter内打开Native页面及嵌入Fragment;源码部分解析页面注册、MethodChannel通信和openPage流程。文末补充iOS端CocoaPods接入与路由实现。
延伸解读
版本锁定是接入前提
文章明确基于 Flutter Boost 1.12.13 和 Flutter SDK 1.12.13-hotfixes,并提醒后续版本接入方式可能变化。这意味着读者若直接套用文中 Gradle 配置、依赖坐标或初始化代码,需先核对自身 Flutter 与 Boost 版本是否匹配,否则容易出现编译或运行时不兼容。
共享引擎如何驱动页面同步
Flutter Boost 采用共享引擎模式,Native 容器通过消息驱动 Flutter 页面容器,使两端页面状态保持同步。源码解析显示,Dart 端注册的页面被存入 Map,Native 通过 MethodChannel 发送 willShowPageContainer 或 openPage 消息,再由容器管理器创建对应页面。理解这条消息链路,有助于排查页面打开失败或参数传递异常。
路由实现需业务侧补齐
Android 初始化时需实现 INativeRouter 的 openContainer,示例中交由 PageRouter 工具类完成 startActivity;iOS 则需实现 FLBPlatform 的 open、present、close 方法。这说明 Flutter Boost 本身不直接决定原生跳转细节,页面栈管理、动画和返回逻辑仍依赖业务侧路由代码,接入时应重点检查这部分实现。
两种集成方式各有适用场景
源码依赖便于开发和调试,适合本地联调;aar 依赖则适合远程打包机器没有 Flutter 环境的场景,也方便第三方快速接入。文章还提到 AndroidX 与 support 分支差异,以及国内镜像源配置。选择集成方式时,应结合团队构建环境和目标支持库版本,避免因环境缺失或分支不匹配导致集成失败。
Q&A
Flutter Boost 是什么?它采用什么模式实现混合开发?
Flutter Boost 是闲鱼团队开发的 Flutter 混合开发框架,采用共享引擎的模式,由 Native 容器通过消息驱动 Flutter 页面容器,实现 Native 与 Flutter 容器的同步。
Android 工程集成 Flutter Boost 时,如何添加依赖?
在 Flutter Module 的 pubspec.yaml 的 dev_dependencies 中添加 flutter_boost 的 git 依赖(ref 为 1.12.13),执行 flutter packages get;然后在 Android 工程的 app/build.gradle 中添加 implementation project(':flutter_boost'),并配置 local.properties 中的 flutter.sdk 路径,最后在 settings.gradle 中引入 flutter-plugin。
在 Flutter 中如何注册页面以便 Native 跳转?
在 Flutter 的 main 方法中,于 initState 里调用 FlutterBoost.singleton.registerPageBuilders 注册页面,传入一个 Map,键为路由名,值为 PageBuilder 函数;并在 MaterialApp 的 builder 中调用 FlutterBoost.init() 初始化。
Native 页面如何打开一个 Flutter 页面并传递参数?
在 Native 页面中调用 PageRouter.openPageByUrl(context, url, params),其中 url 为注册的路由名,params 为要传递的 Map 参数;Flutter 侧在注册的 PageBuilder 中可通过 params 参数接收。
Flutter 页面中如何打开 Native 页面?
在 Flutter 中调用 FlutterBoost.singleton.open('sample://nativePage', urlParams: {'query': {'aaa': 'bbb'}}),即可打开 Native 页面,参数会拼接到 url 的 query 部分。
Flutter Boost 的通信机制是什么?
Flutter Boost 使用 BoostChannel 负责通信,它本质上是 MethodChannel 的一层封装,MethodChannel 是 Native 与 Flutter 通信的方案之一。
iOS 工程如何接入 Flutter Boost?
在 Podfile 中配置 Flutter Module 路径并执行 pod install 集成;然后实现 PlatformRouterImp 路由类(处理 open、present、close),并在 AppDelegate 中调用 FlutterBoostPlugin.sharedInstance startFlutterWithPlatform 绑定路由。