与硬件、第三方服务和平台交互

与硬件、第三方服务和平台交互

应该如何与平台以及平台原生代码交互?

Flutter 不直接在底层平台上运行代码。相反,构成一个 Flutter 应用程序的 Dart 代码是在设备上原生运行的,“绕开”了平台提供的 SDK。这意味着,例如,当您在 Dart 中执行网络请求时,它将直接运行在 Dart 上下文中。在编写原生应用程序时,您通常不会使用 Android 或 iOS 的 API。Flutter 应用程序仍然作为视图驻留在原生应用程序的 ViewController或 Activity 中,但您不能直接访问这个或原生框架。

这并不意味着 Flutter 应用程序不能与这些原生 API 或您自己的任何原生代码交互。Flutter 提供 平台通道,可以与托管 Flutter 视图的 ViewController 或 Activity 通信和交换数据。平台通道本质上是一个异步消息传递机制,它将 Dart 代码与 ViewController 或 Activity 宿主以及它所运行的 iOS 或 Android 框架桥接起来。例如,您可以使用平台通道在原生端执行一个方法,或者从设备的传感器检索一些数据。

除了直接使用平台通道外,您还可以使用各种预制 插件,它们封装了针对特定目标的原生代码和Dart代码。例如,您可以使用插件直接从Flutter访问相机交卷和设备相机,而无需编写自己的集成。插件可以在 Pub、Dart 和 Flutter 的开源包存储库中找到。有些包可能支持iOS上的本地集成,有些支持Android,还有两者都兼而有之的。

如果在Pub上找不到适合您需求的插件,您可以编写自己的插件并 在Pub上发布。

如何访问 GPS 传感器?

使用 geolocator 社区插件.

如何访问摄相机?

image_picker 是流行的访问相机的插件。

如何通过 Facebook 登录?

To log in with Facebook, use the

使用 flutter_facebook_login 社区插件来通过 Facebook 登录。

如何使用 Firebase 特性?

大多数 Firebase 功能被 第一方插件 覆盖。

你也可以在 Pub 上找一些第三方 Firebase 插件,它们覆盖了第一方插件没有直接覆盖的区域。

如何构建自定义的原生集成?

如果有 Flutter 或它的社区插件没有的指定平台的功能,可以根据 开发包与插件 页面自己构建。

简单地说,Flutter 的插件架构很像在 Android 中使用事件总线:您发出一条消息,让接收方处理并向您发回一个结果。在这个例子中,接收方是运行在 Android 或 iOS 上的原生代码。