跳转至正文

调用 Jetpack API

从 Dart 代码使用最新的 Android API

在 Android 上运行的 Flutter 应用始终可以在 Android 发布最新 API 的当天就使用它们,无一例外。本页概述调用 Android 专用 API 的可用方式。

使用现有方案

#

在大多数场景下,你可以使用插件(如下一节所示)调用原生 API,而无需自己编写自定义样板或胶水代码。

使用插件

#

使用插件通常是访问原生 API 最简便的方式,无论你的 Flutter 应用运行在哪里。要使用插件,请访问 pub.dev 并搜索你需要的主题。大多数原生功能(包括访问 GPS、相机、计步器等常见硬件)都有成熟的插件支持。

有关向 Flutter 应用添加插件的完整指南,请参阅使用 package 文档

并非所有原生功能都有插件支持,尤其是在刚发布时。若你需要的原生功能在 pub.dev 上没有对应 package,请继续阅读以下章节。

创建自定义方案

#

并非所有场景和 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 文档