跳到主内容

调用 JetPack API

从 Dart 代码中使用最新的 Android API

无论如何,在 Android 上运行的 Flutter 应用始终可以在 Android 发布最新 API 的第一时间使用它们。本页概述了调用 Android 特定 API 的可用方法。

使用现有解决方案

#

在大多数情况下,您可以使用插件(如下一节所示)来调用原生 API,而无需自己编写任何自定义的样板代码或粘合代码。

使用插件

#

无论您的 Flutter 应用运行在何处,使用插件通常都是访问原生 API 最简单的方法。要使用插件,请访问 pub.dev 并搜索您需要的主题。大多数原生功能(包括访问 GPS、摄像头或计步器等常见硬件)都由成熟的插件提供支持。

有关将插件添加到 Flutter 应用的完整指南,请参阅使用软件包文档

并非所有原生功能都受插件支持,特别是在刚发布时。如果 pub.dev 上的软件包未涵盖您所需的原生功能,请继续阅读后续章节。

创建自定义解决方案

#

并非所有场景和 API 都有现成的解决方案;但幸运的是,您可以随时添加所需的任何支持。接下来的章节介绍了从 Dart 调用原生代码的两种不同方法。

通过 FFI 直接调用原生代码

#

调用原生 API 最直接、最高效的方法是通过 FFI 直接调用该 API。这会在编译时将您的 Dart 可执行文件链接到指定的任何原生代码,从而允许您通过少量的粘合代码直接从 UI 线程调用它。在大多数情况下,ffigenjnigen 有助于编写此粘合代码。

有关从 Flutter 应用直接调用原生代码的完整指南,请参阅 FFI 文档

在接下来的几个月中,Dart 团队希望通过直接支持使用 FFI 方法调用原生 API 来简化此过程,届时开发人员将无需编写任何粘合代码。

添加 MethodChannel

#

MethodChannel 是 Flutter 应用调用任意原生代码的另一种方式。与前述 FFI 解决方案不同,MethodChannel 始终是异步的,根据您的用例,这可能重要也可能不重要。与 FFI 和直接调用原生代码一样,使用 MethodChannel 需要少量的粘合代码将 Dart 对象转换为原生对象,然后再转换回来。在大多数情况下,pkg:pigeon 有助于编写此粘合代码。

有关向 Flutter 应用添加 MethodChannel 的完整指南,请参阅 MethodChannel 文档