将 Flutter View 添加到 Android 应用
通过 FlutterView 集成比之前描述的通过 FlutterActivity 和 FlutterFragment 集成需要更多工作。
从根本上说,Dart 端的 Flutter 框架需要访问各种活动级事件和生命周期才能正常工作。由于 FlutterView(它是 android.view.View)可以添加到开发人员应用程序拥有的任何活动中,并且由于 FlutterView 无法访问活动级事件,因此开发人员必须手动将这些连接桥接到 FlutterEngine。
您选择如何将应用程序活动的事件提供给 FlutterView 将特定于您的应用程序。
示例
#与 FlutterActivity 和 FlutterFragment 的指南不同,FlutterView 集成可以通过示例项目更好地演示。
示例项目位于 https://github.com/flutter/samples/tree/main/add_to_app/android_view,用于记录一个简单的 FlutterView 集成,其中 FlutterView 用于 RecycleView 卡片列表中的一些单元格,如上图 GIF 所示。
通用方法
#FlutterView 级集成的总体要点是,您必须在您自己的应用程序代码中重新创建活动、FlutterView 和 FlutterEngine 之间的各种交互,这些交互在 FlutterActivityAndFragmentDelegate 中存在。当使用 FlutterActivity 或 FlutterFragment 时,FlutterActivityAndFragmentDelegate 中建立的连接会自动完成,但由于在这种情况下 FlutterView 正在添加到应用程序中的活动或片段中,因此您必须手动重新创建这些连接。否则,FlutterView 将不会呈现任何内容或缺少其他功能。
示例 FlutterViewEngine 类展示了活动、FlutterView 和 FlutterEngine 之间特定于应用程序的连接的一种可能的实现。
要实现的 API
#Flutter 能够绘制任何内容所需的绝对最小实现是
- 当 FlutterView 添加到已恢复的活动的视图层次结构中并且可见时,调用 attachToFlutterEngine;以及
- 当承载 FlutterView 的活动可见时,在 FlutterEngine 的
lifecycleChannel
字段上调用 appIsResumed。
detachFromFlutterEngine 的反向操作以及 LifecycleChannel 类上的其他生命周期方法也必须被调用,以防止在 FlutterView 或活动不再可见时泄漏资源。
此外,请参阅 FlutterViewEngine 演示类或 FlutterActivityAndFragmentDelegate 中的其余实现,以确保剪贴板、系统 UI 叠加层、插件等其他功能的正常运行。
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-04-04。 查看源代码 或 报告问题。