[toc]
和硬件、第三方服务以及平台交互
1. 我怎么和平台,以及平台的原生代码交互?
Flutter 的代码并不直接在平台之下运行,相反,Dart 代码构建的 Flutter 应用在设备上以原生的方式运行,却“侧步躲开了”平台提供的 SDK。这意味着,例如,你在 Dart 中发起一个网络请求,它就直接在 Dart 的上下文中运行。你并不会用上平常在 iOS 或 Android 上使用的原生 API。你的 Flutter 程序仍然被原生平台的 ViewController
管理作一个 view,但是你并不会直接访问 ViewController
自身,或是原生框架。
但这并不意味着 Flutter 不能和原生 API,或任何你编写的原生代码交互。Flutter 提供了 platform channels ,来和管理你的 Flutter view 的 ViewController 通信和交互数据。平台管道本质上是一个异步通信机制,桥接了 Dart 代码和宿主 ViewController,以及它运行于的 iOS 框架。你可以用平台管道来执行一个原生的函数,或者是从设备的传感器中获取数据。
除了直接使用平台管道之外,你还可以使用一系列预先制作好的 plugins。例如,你可以直接使用插件来访问相机胶卷或是设备的摄像头,而不必编写你自己的集成层代码。你可以在 Pub 上找到插件,这是一个 Dart 和 Flutter 的开源包仓库。其中一些包可能会支持集成 iOS 或 Android,或两者均可。
如果你在 Pub 上找不到符合你需求的插件,你可以自己编写 ,并且发布在 Pub 上。
2. 我怎么访问 GPS 传感器?
使用 location 社区插件。
3. 我怎么访问摄像头?
image_picker 在访问摄像头时非常常用。
4. 我怎么登录 Facebook?
登录 Facebook 可以使用 flutter_facebook_login 社区插件。
5. 我怎么使用 Firebase 特性?
大多数 Firebase 特性被 first party plugins 包含了。这些第一方插件由 Flutter 团队维护:
- firebase_admob for Firebase AdMob
- firebase_analytics for Firebase Analytics
- firebase_auth for Firebase Auth
- firebase_core for Firebase’s Core package
- firebase_database for Firebase RTDB
- firebase_storage for Firebase Cloud Storage
- firebase_messaging for Firebase Messaging (FCM)
- cloud_firestore for Firebase Cloud Firestore
你也可以在 Pub 上找到 Firebase 的第三方插件。
6. 我怎创建自己的原生集成层?
如果有一些 Flutter 和社区插件遗漏的平台相关的特性,可以根据 developing packages andplugins 页面构建自己的插件。
Flutter 的插件结构,简要来说,就像 Android 中的 Event bus。你发送一个消息,并让接受者处理并反馈结果给你。在这种情况下,接受者就是在 Android 或 iOS 上的原生代码。