无论如何,运行在 Android 上的 Flutter 应用都可以在 Android API 发布的第一天就使用最新的 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 有助于编写这些胶水代码。

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