将 Flutter 添加到现有应用
添加到应用
#如果您从头开始编写新应用,那么使用 Flutter 入门会很简单。但如果您已经有一个不是用 Flutter 编写的应用,并且从头开始不切实际,该怎么办?
在这种情况下,Flutter 可以作为模块,零散地集成到您现有的应用程序中。此功能称为“添加到应用”。该模块可以导入到您现有的应用中,以使用 Flutter 渲染您应用的一部分,而其余部分可以使用现有技术进行渲染。此方法还可以利用 Dart 的可移植性和与其他语言的互操作性来运行共享的非 UI 逻辑。
目前支持 Android、iOS 和 Web 添加到应用。
Flutter 支持两种添加应用的方式
- 多引擎:支持 Android 和 iOS,允许运行一个或多个 Flutter 实例,每个实例渲染嵌入到宿主应用中的小部件。每个实例都是一个独立的 Dart 程序,与其他程序隔离运行。拥有多个 Flutter 实例允许每个实例保持独立的应用和 UI 状态,同时占用最少的内存资源。请参阅 多个 Flutter 页面了解更多信息。
- 多视图:支持 Web,允许创建多个 FlutterView,每个 FlutterView 渲染嵌入到宿主应用中的小部件。在此模式下,只有一个 Dart 程序,并且所有视图和小部件都可以共享对象。
添加到应用支持集成任意大小的多个 Flutter 视图,并支持各种用例。两个最常见的用例是
- 混合导航栈:应用由多个屏幕组成,其中一些由 Flutter 渲染,另一些由其他框架渲染。用户可以自由地在屏幕之间导航,无论使用哪种框架来渲染屏幕。
- 部分屏幕视图:应用中的屏幕渲染多个小部件,其中一些由 Flutter 渲染,另一些由其他框架渲染。用户可以自由地滚动和与任何小部件进行交互,无论使用哪种框架来渲染小部件。
支持的功能
#添加到 Android 应用
#
- 通过将 Flutter SDK 钩子添加到 Gradle 脚本来自动构建和导入 Flutter 模块。
- 将 Flutter 模块构建为通用的 Android Archive (AAR),以便集成到您自己的构建系统中,并更好地与 AndroidX 进行 Jetifier 互操作。
FlutterEngine
API,用于独立于FlutterActivity
/FlutterFragment
等启动和持久化 Flutter 环境。- Android Studio Android/Flutter 并发编辑和模块创建/导入向导。
- 支持 Java 和 Kotlin 宿主应用。
- Flutter 模块可以使用 Flutter 插件与平台进行交互。
- 通过使用 IDE 或命令行中的
flutter attach
连接到包含 Flutter 的应用,支持 Flutter 调试和状态热重载。
添加到 iOS 应用
#
- 通过将 Flutter SDK 钩子添加到 CocoaPods 和 Xcode 构建阶段来自动构建和导入 Flutter 模块。
- 将 Flutter 模块构建为通用的 iOS Framework,以便集成到您自己的构建系统中。
FlutterEngine
API,用于独立于FlutterViewController
启动和持久化 Flutter 环境。- 支持 Objective-C 和 Swift 宿主应用。
- Flutter 模块可以使用 Flutter 插件与平台进行交互。
- 通过使用 IDE 或命令行中的
flutter attach
连接到包含 Flutter 的应用,支持 Flutter 调试和状态热重载。
请参阅我们 添加到应用 GitHub 示例代码库,其中包含 Android 和 iOS 的示例项目,这些项目导入了一个用于 UI 的 Flutter 模块。
添加到 Web 应用
#Flutter 可以添加到任何现有的基于 HTML DOM 的 Web 应用中,这些应用可以用任何客户端 Dart Web 框架(jaspr、ngdart、over_react 等)、任何客户端 JS 框架(React、Angular、Vue.js 等)、任何服务器端渲染框架(Django、Ruby on Rails、Apache Struts 等)编写,甚至没有框架(被称为“VanillaJS”)。最低要求是您的现有应用程序及其框架支持导入 JavaScript 库,并创建 Flutter 用于渲染的 HTML 元素。
要将 Flutter 添加到现有应用,请正常构建应用,然后按照 嵌入说明将 Flutter 视图添加到页面。
开始使用
#要开始,请参阅我们的 Android 和 iOS 项目集成指南
API 用法
#将 Flutter 集成到项目后,请参阅以下链接中的 API 用法指南
局限性
#移动端限制
- 不支持多视图模式(仅支持多引擎)。
- 不支持将多个 Flutter 库打包到应用中。
- 不支持
FlutterPlugin
的插件可能会产生意外行为,如果它们依赖于添加到应用场景中不可行的假设(例如,假设 FlutterActivity
始终存在)。 - 在 Android 上,Flutter 模块仅支持 AndroidX 应用。
Web 端限制
- 不支持多引擎模式(仅支持多视图)。
- 无法完全“关闭”Flutter 引擎。应用可以移除所有 FlutterView 对象,并确保使用常规 Dart 概念对所有数据进行垃圾回收。但是,即使引擎没有渲染任何内容,它仍然会保持预热状态。