將 Flutter View 新增至 Android 應用程式
透過 FlutterView 進行整合,會比先前描述的透過 FlutterActivity 和 FlutterFragment 整合需要更多的工作。
從根本上來說,Dart 端上的 Flutter 框架需要存取各種 Activity 層級的事件和生命週期才能運作。由於 FlutterView(它是 android.view.View)可以添加到開發人員應用程式擁有的任何 Activity 中,並且由於 FlutterView 無法存取 Activity 層級的事件,因此開發人員必須手動將這些連接橋接至 FlutterEngine。
您選擇如何將應用程式的 Activity 事件饋送到 FlutterView,將會因您的應用程式而異。
範例
#與 FlutterActivity 和 FlutterFragment 的指南不同,FlutterView 的整合可以用範例專案來更好地展示。
範例專案位於 https://github.com/flutter/samples/tree/main/add_to_app/android_view,用來記錄一個簡單的 FlutterView 整合,其中 FlutterView 用於 RecycleView 卡片清單中的某些儲存格,如上方的 GIF 所示。
一般方法
#FlutterView 層級整合的重點是,您必須在您自己的應用程式程式碼中,重新建立您的 Activity、FlutterView 和 FlutterEngine 之間在 FlutterActivityAndFragmentDelegate 中存在的各種互動。當使用 FlutterActivity 或 FlutterFragment 時,FlutterActivityAndFragmentDelegate 中建立的連線會自動完成,但由於在此情況下,FlutterView 被加入到您應用程式中的 Activity 或 Fragment,因此您必須手動重新建立這些連線。否則,FlutterView 將不會渲染任何內容,或具有其他遺失的功能。
一個範例 FlutterViewEngine 類別展示了一個應用程式特定連線的可能實作範例,該連線介於 Activity、FlutterView 和 FlutterEngine 之間。
要實作的 API
#Flutter 要繪製任何內容所需的絕對最小實作是:
- 當 FlutterView 被新增到恢復的 Activity 檢視層級結構且可見時,呼叫 attachToFlutterEngine;以及
- 當託管 FlutterView 的 Activity 可見時,呼叫 appIsResumed 在 FlutterEngine 的
lifecycleChannel
欄位上。
當 FlutterView 或 Activity 不再可見時,也必須呼叫相反的 detachFromFlutterEngine 和 LifecycleChannel 類別上的其他生命週期方法,以避免洩漏資源。
此外,請參閱 FlutterViewEngine 示範類別或 FlutterActivityAndFragmentDelegate 中的其餘實作,以確保其他功能(如剪貼簿、系統 UI 覆蓋、外掛程式等)的正常運作。
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-04-04。 檢視原始碼 或 回報問題。