调用 JetPack API
在 Android 上运行的 Flutter 应用,无论何时,都能在 Android API 发布的第一天就立即使用最新的 API。本页面概述了调用 Android 特有 API 的可用方法。
使用现有解决方案
#在大多数情况下,您可以使用插件(如下一节所示)来调用原生 API,而无需自己编写任何自定义的样板代码或粘合代码。
使用插件
#使用插件通常是访问原生 API 的最简单方法,无论您的 Flutter 应用在哪里运行。要使用插件,请访问 pub.dev 并搜索您需要的主题。大多数原生功能,包括访问 GPS、相机或计步器等常用硬件,都得到了强大插件的支持。
有关将插件添加到 Flutter 应用的完整指南,请参阅 使用软件包文档。
并非所有原生功能都由插件支持,尤其是在发布后不久。在 pub.dev 上找不到所需原生功能的任何情况下,请继续阅读以下各节。
创建自定义解决方案
#并非所有场景和 API 都能得到现有解决方案的支持;但幸运的是,您可以随时添加所需的任何支持。接下来的几节将介绍从 Dart 调用原生代码的两种不同方法。
通过 FFI 直接调用原生代码
#调用原生 API 最直接、最高效的方法是通过 FFI 直接调用。这会在编译时将您的 Dart 可执行文件链接到任何指定的原生代码,使您能够通过少量粘合代码直接从 UI 线程调用它。在大多数情况下,ffigen 或 jnigen 有助于编写此粘合代码。
有关直接从 Flutter 应用调用原生代码的完整指南,请参阅 FFI 文档。
在接下来的几个月里,Dart 团队希望通过直接支持使用 FFI 方法调用原生 API,但无需开发人员编写粘合代码,来简化这一过程。
添加 MethodChannel
#MethodChannel
是 Flutter 应用调用任意原生代码的另一种方法。与上一步中描述的 FFI 解决方案不同,MethodChannel 始终是异步的,这是否重要取决于您的用例。与 FFI 和直接调用原生代码一样,使用 MethodChannel
需要少量粘合代码来将您的 Dart 对象转换为原生对象,然后再转换回来。在大多数情况下,pkg:pigeon
有助于编写此粘合代码。
有关将 MethodChannel 添加到 Flutter 应用的完整指南,请参阅 MethodChannel
s 文档。