和硬件、第三方服务以及系统平台交互
和硬件、第三方服务以及系统平台交互
如何与系统平台以及平台原生代码进行交互?
Flutter 并不直接在平台上运行代码;而是以 Dart 代码的方式原生运行于设备之上,这算是绕过了平台的 SDK 的限制。这意味着,例如,你用 Dart 发起了一个网络请求,它会直接在 Dart 的上下文中运行。你不需要调用写 iOS 或者 Android 原生应用时常用的 API 接口。你的 Flutter 应用仍旧被原生平台的 ViewController 当做一个 view 来管理,但是你不能够直接访问 ViewController 自身或是对应的原生框架。
这并不意味着 Flutter 应用不能够和原生 API,或是原生代码进行交互。Flutter 提供了用来和宿主 ViewController 通信和交换数据的 platform channels。platform channels 本质上是一个桥接了 Dart 代码与宿主 ViewController 和 iOS 框架的异步通信模型。你可以通过 platform channels 来执行原生代码的方法,或者获取设备的传感器信息等数据。
除了直接使用 platform channels 之外,也可以使用一系列包含了原生代码和 Dart代码,实现了特定功能的现有插件。例如,你在 Flutter 中可以直接使用插件来访问相册或是设备摄像头,而不需要自己重新集成。pub.dev 是一个Dart 和 Flutter 的开源包仓库,你可以在这里找到需要的插件。有些包可能支持集成 iOS 或 Android,或两者皆有。
如果你在 Pub 找不到自己需要的包,你可以自己写一个,相关信息可以查阅 Flutter Packages 的开发和提交,并且你可以将其 发布到 Pub 上。
如何访问 GPS 传感器?
使用 geolocator 插件,这一插件由社区提供。
如何访问相机?
image_picker 是常用的访问相机的插件。
如何使用 Facebook 登录?
登录 Facebook 可以使用 flutter_facebook_login 插件。
如何集成 Firebase 的功能?
大多数的 Firebase 特性都在 官方维护的插件 中实现了。这些插件由 Flutter 官方团队维护:
-
搭配
firebase_admob插件来使用 Firebase AdMob -
搭配
firebase_analytics插件来使用 Firebase Analytics -
搭配
firebase_auth插件来使用 Firebase Auth -
搭配
firebase_core插件来使用 Firebase 核心库 -
搭配
firebase_database插件来使用 Firebase RTDB -
搭配
firebase_storage插件来使用 Firebase Cloud Storage -
搭配
firebase_messaging插件来使用 Firebase Messaging (FCM) -
搭配
cloud_firestore插件来使用 Firebase Cloud Firestore
在 pub.dev 上你也可以找到一些第三方的 Firebase 插件,主要实现了官方插件没有直接实现的功能。
如何构建自己的插件?
如果有一些 Flutter 和遗漏的平台特性,可以根据 developing packages and plugins 构建自己的插件。
Flutter 的插件结构,简单来说,更像是 Android 中的 Event bus:你发送一个消息,并让接受者处理并反馈结果给你。这种情况下,接受者就是在 iOS 或 Android 的原生代码。
