与硬件、第三方服务和平台交互
与硬件、第三方服务和平台交互
应该如何与平台以及平台原生代码交互?
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 功能被 第一方插件 覆盖。
firebase_admobfor Firebase AdMobfirebase_analyticsfor Firebase Analyticsfirebase_authfor Firebase Authfirebase_databasefor Firebase RTDBfirebase_storagefor Firebase Cloud Storagefirebase_messagingfor Firebase Messaging (FCM)flutter_firebase_uifor quick Firebase Auth integrations (Facebook, Google, Twitter and email)cloud_firestorefor Firebase Cloud Firestore
你也可以在 Pub 上找一些第三方 Firebase 插件,它们覆盖了第一方插件没有直接覆盖的区域。
如何构建自定义的原生集成?
如果有 Flutter 或它的社区插件没有的指定平台的功能,可以根据 开发包与插件 页面自己构建。
简单地说,Flutter 的插件架构很像在 Android 中使用事件总线:您发出一条消息,让接收方处理并向您发回一个结果。在这个例子中,接收方是运行在 Android 或 iOS 上的原生代码。
