多個 Flutter 畫面或視圖
情境
#如果您將 Flutter 整合到現有的應用程式中,或逐步遷移現有的應用程式以使用 Flutter,您可能會發現自己想要在同一個專案中加入多個 Flutter 執行個體。特別是,這在下列情境中很有用
- 整合的 Flutter 畫面不是導覽圖中的葉節點,而且導覽堆疊可能是原生 -> Flutter -> 原生 -> Flutter 的混合應用程式。
- 一個畫面可以同時整合並顯示多個部分畫面的 Flutter 視圖。
使用多個 Flutter 執行個體的優點是每個執行個體都是獨立的,並且維護其自己的內部導覽堆疊、UI 和應用程式狀態。這簡化了整體應用程式程式碼在狀態保持方面的責任,並提高了模組化程度。有關多個 Flutter 使用情境的更多詳細資訊,請參閱 flutter.dev/go/multiple-flutters。
Flutter 針對此情境進行了最佳化,加入其他 Flutter 執行個體的增量記憶體成本很低(約 180kB)。這種固定成本降低使得多個 Flutter 執行個體模式可以更自由地在您的「加入應用程式」整合中使用。
組件
#在 Android 和 iOS 上加入多個 Flutter 執行個體的主要 API 基於新的 FlutterEngineGroup
類別(Android API,iOS API)來建構 FlutterEngine
,而不是先前使用的 FlutterEngine
建構函式。
雖然 FlutterEngine
API 是直接且更容易使用的,但從同一個 FlutterEngineGroup
產生的 FlutterEngine
具有效能優勢,因為它們可以共用許多常用的可重複使用資源,例如 GPU 環境、字型度量和隔離群組快照,從而縮短了初始渲染延遲並降低了記憶體佔用空間。
從
FlutterEngineGroup
產生的FlutterEngine
可以像通常建構的快取FlutterEngine
一樣,用於連線到 UI 類別,例如FlutterActivity
或FlutterViewController
。從
FlutterEngineGroup
產生的第一個FlutterEngine
不需要繼續存活,才能讓後續的FlutterEngine
共用資源,只要隨時至少有 1 個正在執行的FlutterEngine
即可。從
FlutterEngineGroup
建立第一個FlutterEngine
具有與先前使用建構函式建構FlutterEngine
相同的 效能特性。當
FlutterEngineGroup
中的所有FlutterEngine
都被銷毀時,下一個建立的FlutterEngine
具有與第一個引擎相同的效能特性。FlutterEngineGroup
本身不需要在所有產生的引擎之後繼續存活。銷毀FlutterEngineGroup
不會影響現有的產生的FlutterEngine
,但會移除產生其他與現有產生的引擎共用資源的FlutterEngine
的能力。
溝通
#Flutter 執行個體之間的通訊是使用主機平台的平台通道(或 Pigeon)來處理。若要查看我們關於通訊的路線圖或關於增強多個 Flutter 執行個體的其他規劃工作,請查看 Issue 72009。
範例
#您可以在 GitHub 上找到一個範例,示範如何在 Android 和 iOS 上使用 FlutterEngineGroup
。
除非另有說明,否則本網站上的文件反映了最新穩定版的 Flutter。頁面上次更新於 2024-05-08。 檢視原始碼 或 回報問題。