将 Flutter 集成到现有应用

集成到现有应用

有时候,用 Flutter 一次性重写整个已有的应用是不切实际的。对于这些情况,Flutter 可以作为一个库或模块,集成进现有的应用当中。模块引入到你的 Android 或 iOS 应用(当前支持的平台)中,以使用 Flutter 来渲染一部分的 UI,或者仅运行多平台共享的 Dart 代码逻辑。

仅需几步,你就可以将高效而富有表现力的 Flutter 引入你的应用。

Add-to-app 支持将多个 Flutter 实例附加到任意大小的视图上。适用于混合栈应用在导航到原生页面和 Flutter 页面的情况,也适用于一个页面有原生视图和 Flutter 视图的情况等混合栈应用。

多个 Flutter 实例会帮助每个实例保持独立的应用和 UI 状态,同时使用最少的内存资源。请多详细内容,请参考文档: 多个 Flutter 实例

已支持的特性

集成到 Android 应用

Add-to-app steps on Android
  • 在 Gradle 脚本中添加一个自动构建并引入 Flutter 模块的 Flutter SDK 钩子。

  • 将 Flutter 模块构建为通用的 Android Archive (AAR) 以便集成到你自己的构建系统中,并提高 Jetifier 与 AndroidX 的互操作性;

  • FlutterEngine API 用于启动并持续地为挂载 FlutterActivityFlutterFragment 提供独立的 Flutter 环境;

  • Android Studio 的 Android 与 Flutter 同时编辑,以及 Flutter module 创建与导入向导;

  • 支持了 Java 和 Kotlin 为宿主的应用程序;

  • Flutter 模块可以通过使用 Flutter plugins 与平台进行交互。

  • 支持通过从 IDE 或命令行中使用 flutter attach 来实现 Flutter 调试与有状态的热重载。

集成到 iOS 应用

Add-to-app steps on iOS
  • 在 Xcode 的 Build Phase 以及 CocoaPods 中,添加一个自动构建并引入 Flutter 模块的 Flutter SDK 钩子。

  • 将 Flutter 模块构建为通用的 iOS Framework 以便集成到你自己的构建系统中;

  • FlutterEngine API 用于启动并持续地为挂载 FlutterViewController 以提供独立的 Flutter 环境;

  • 支持了 Objective-C 和 Swift 为宿主的应用程序;

  • Flutter 模块可以通过使用 Flutter plugins 与平台进行交互;

  • 支持通过从 IDE 或命令行中使用 flutter attach 来实现 Flutter 调试与有状态的热重载。

查看 add-to-app GitHub 示例仓库 中在 iOS 和 Android 平台上引入 Flutter module 的示例项目。

开始

第一步,查看以下工程集成指南

API 用法

将 Flutter 集成进你的工程后,可以查看以下 API 使用指南

已知限制

  • 不支持将多个 Flutter 库(Flutter 模块)同时打包进一个应用。

  • 不支持 FlutterPlugin 的插件如果在 add-to-app 进行一些不合理的假设(例如假设 Flutter 的 Activity 始终存在),可能会出现意外行为。

  • Android 平台的 Flutter 模块仅支持适配了 AndroidX 的应用。