Skip to main content

将 Flutter View 添加到 Android 应用

通过 FlutterView 集成比之前描述的通过 FlutterActivity 和 FlutterFragment 集成需要更多工作。

从根本上说,Dart 端的 Flutter 框架需要访问各种活动级别的事件和生命周期才能运行。由于 FlutterView(它是 android.view.View)可以添加到开发者应用程序拥有的任何活动中,并且由于 FlutterView 无法访问活动级别的事件,因此开发者必须手动将这些连接桥接到 FlutterEngine

您选择如何将应用程序活动的事件馈送到 FlutterView 将取决于您的应用程序。

示例

#

添加 Flutter View 示例视频

与 FlutterActivity 和 FlutterFragment 的指南不同,FlutterView 集成可以通过示例项目更好地演示。

一个示例项目位于 https://github.com/flutter/samples/tree/main/add_to_app/android_view,用于记录简单的 FlutterView 集成,其中 FlutterView 用于 RecycleView 卡片列表中的一些单元格,如上面的 gif 所示。

常规方法

#

FlutterView 级集成的一般要点是,您必须重新创建活动、FlutterViewFlutterEngine 之间的各种交互,这些交互存在于您自己的应用程序代码中的 FlutterActivityAndFragmentDelegate 中。当使用 FlutterActivityFlutterFragment 时,FlutterActivityAndFragmentDelegate 中的连接会自动完成,但是由于在这种情况下 FlutterView 被添加到应用程序中的活动或片段中,因此您必须手动重新创建连接。否则,FlutterView 将不会呈现任何内容或缺少其他功能。

一个示例 FlutterViewEngine 类显示了活动、FlutterViewFlutterEngine 之间特定于应用程序连接的一种可能的实现。

要实现的 API

#

Flutter 绘制任何内容所需的绝对最小实现是:

还必须调用反向 detachFromFlutterEngineLifecycleChannel 类上的其他生命周期方法,以便在 FlutterView 或活动不再可见时不泄漏资源。

此外,请参阅 FlutterViewEngine 演示类或 FlutterActivityAndFragmentDelegate 中的其余实现,以确保剪贴板、系统 UI 叠加层、插件等其他功能的正确运行。