[toc]
和硬件、第三方服務(wù)以及平臺(tái)交互
1. 我怎么和平臺(tái),以及平臺(tái)的原生代碼交互?
Flutter 的代碼并不直接在平臺(tái)之下運(yùn)行,相反,Dart 代碼構(gòu)建的 Flutter 應(yīng)用在設(shè)備上以原生的方式運(yùn)行,卻“側(cè)步躲開(kāi)了”平臺(tái)提供的 SDK。這意味著,例如,你在 Dart 中發(fā)起一個(gè)網(wǎng)絡(luò)請(qǐng)求,它就直接在 Dart 的上下文中運(yùn)行。你并不會(huì)用上平常在 iOS 或 Android 上使用的原生 API。你的 Flutter 程序仍然被原生平臺(tái)的 ViewController 管理作一個(gè) view,但是你并不會(huì)直接訪問(wèn) ViewController 自身,或是原生框架。
但這并不意味著 Flutter 不能和原生 API,或任何你編寫(xiě)的原生代碼交互。Flutter 提供了 platform channels ,來(lái)和管理你的 Flutter view 的 ViewController 通信和交互數(shù)據(jù)。平臺(tái)管道本質(zhì)上是一個(gè)異步通信機(jī)制,橋接了 Dart 代碼和宿主 ViewController,以及它運(yùn)行于的 iOS 框架。你可以用平臺(tái)管道來(lái)執(zhí)行一個(gè)原生的函數(shù),或者是從設(shè)備的傳感器中獲取數(shù)據(jù)。
除了直接使用平臺(tái)管道之外,你還可以使用一系列預(yù)先制作好的 plugins。例如,你可以直接使用插件來(lái)訪問(wèn)相機(jī)膠卷或是設(shè)備的攝像頭,而不必編寫(xiě)你自己的集成層代碼。你可以在 Pub 上找到插件,這是一個(gè) Dart 和 Flutter 的開(kāi)源包倉(cāng)庫(kù)。其中一些包可能會(huì)支持集成 iOS 或 Android,或兩者均可。
如果你在 Pub 上找不到符合你需求的插件,你可以自己編寫(xiě) ,并且發(fā)布在 Pub 上。
2. 我怎么訪問(wèn) GPS 傳感器?
使用 location 社區(qū)插件。
3. 我怎么訪問(wèn)攝像頭?
image_picker 在訪問(wèn)攝像頭時(shí)非常常用。
4. 我怎么登錄 Facebook?
登錄 Facebook 可以使用 flutter_facebook_login 社區(qū)插件。
5. 我怎么使用 Firebase 特性?
大多數(shù) Firebase 特性被 first party plugins 包含了。這些第一方插件由 Flutter 團(tuán)隊(duì)維護(hù):
- 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. 我怎創(chuàng)建自己的原生集成層?
如果有一些 Flutter 和社區(qū)插件遺漏的平臺(tái)相關(guān)的特性,可以根據(jù) developing packages andplugins 頁(yè)面構(gòu)建自己的插件。
Flutter 的插件結(jié)構(gòu),簡(jiǎn)要來(lái)說(shuō),就像 Android 中的 Event bus。你發(fā)送一個(gè)消息,并讓接受者處理并反饋結(jié)果給你。在這種情況下,接受者就是在 Android 或 iOS 上的原生代碼。