將 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 互操作。
FlutterEngineAPI,用於獨立於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,以便整合到您自己的構建系統中。
FlutterEngineAPI,用於獨立於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 概念對所有資料進行垃圾回收。但是,即使引擎沒有渲染任何內容,它仍然會保持預熱狀態。