跳至主要內容

多個 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 APIiOS API)來建構 FlutterEngine,而不是先前使用的 FlutterEngine 建構函式。

雖然 FlutterEngine API 是直接且更容易使用的,但從同一個 FlutterEngineGroup 產生的 FlutterEngine 具有效能優勢,因為它們可以共用許多常用的可重複使用資源,例如 GPU 環境、字型度量和隔離群組快照,從而縮短了初始渲染延遲並降低了記憶體佔用空間。

  • FlutterEngineGroup 產生的 FlutterEngine 可以像通常建構的快取 FlutterEngine 一樣,用於連線到 UI 類別,例如 FlutterActivityFlutterViewController

  • FlutterEngineGroup 產生的第一個 FlutterEngine 不需要繼續存活,才能讓後續的 FlutterEngine 共用資源,只要隨時至少有 1 個正在執行的 FlutterEngine 即可。

  • FlutterEngineGroup 建立第一個 FlutterEngine 具有與先前使用建構函式建構 FlutterEngine 相同的 效能特性

  • FlutterEngineGroup 中的所有 FlutterEngine 都被銷毀時,下一個建立的 FlutterEngine 具有與第一個引擎相同的效能特性。

  • FlutterEngineGroup 本身不需要在所有產生的引擎之後繼續存活。銷毀 FlutterEngineGroup 不會影響現有的產生的 FlutterEngine,但會移除產生其他與現有產生的引擎共用資源的 FlutterEngine 的能力。

溝通

#

Flutter 執行個體之間的通訊是使用主機平台的平台通道(或 Pigeon)來處理。若要查看我們關於通訊的路線圖或關於增強多個 Flutter 執行個體的其他規劃工作,請查看 Issue 72009

範例

#

您可以在 GitHub 上找到一個範例,示範如何在 Android 和 iOS 上使用 FlutterEngineGroup

A sample demonstrating multiple-Flutters