Flutter學習之旅(三)----Flutter常見問題FAQ,看完之後不再是Flutter小白
很多人還不熟悉甚至沒聽過Flutter,只知道它是用來搞移動端開發的,現在Android和iOS開發已經很成熟了,還有RN(React Native)框架,為什麼谷歌還要搞一個Flutter,它能夠做什麼,究竟比別人好在哪裡,有什麼優勢和不足,又是怎麼做到的?下面是一些關於Flutter的常見問題,參考文章(英文版)。
相信看完之後你就真相大白了。
什麼是Flutter?
Flutter是移動端開發SDK,包括框架,控制元件和工具等,能開發出漂亮的移動端APP,且同時支援Android和iOS。
Flutter為誰而生?
如果你是移動端開發者,並且想以快速而又簡單的方式開發漂亮的APP,那麼Flutter是為你而生。
我能使用Flutter開發什麼樣的APP?
Flutter為執行在Android和iOS的2D APP而優化。Flutter開發的APP既適用於簡單場景,比如傳遞品牌價值,也適用於複雜場景,比如股票交易平臺。你可以用Flutter開發出各種有特點的APP,比如相機,地理定位,網路,儲存和第三方SDK等待。
有哪些人使用了Flutter?
Google公司的銷售工具APP-商店管理APP和Newsvoice的Android和iOS端的APP都是用Flutter開發的,還有一些其他正在用Flutter開發的APP。
Flutter的特別之處在哪裡?
Flutter既不使用WebView,也不使用系統的原生控制元件,而是通過高效能的渲染引擎來畫控制元件。除此之外,Flutter不同是因為它只有C/C++程式碼編寫的單一層,這樣開發者更容易控制系統,或者說更容易讀取或者修改系統的元件,手勢,動畫框架和控制元件等等。
我應該用Flutter開發我的下一個APP產品嗎?
Flutter正在開發中並尚未達1.0版,不過API很穩定,你需要的特點基本上已經都提供了,所以最終取決於你自己。
Flutter SDK包括哪些東西?
*深度優化,手機優先的2D渲染引擎以及對文字的極佳支援。
*Rx(響應式程式設計)框架
*針對Android和iOS豐富的控制元件集合
*提供單元和整合測試API
*提供連線系統和第三方SDK的API
*使用命令列來create, build,test 和 compile APP
Flutter工作是否需要編輯器或者IDE?
在IntelliJ IDEA(同時支援Ultimate和Community版本)裡面安裝Flutter外掛即可工作。或者你可以結合flutter命令列和支援編輯Dart的編輯器。
Flutter是否包含框架?
是的,有響應式程式設計框架,靈感來源於React框架。不過該框架是可選的,開發者可以選擇使用該框架的一部分或者換一個其他框架。
Flutter包含依賴注入(dependency injection)框架嗎?
暫時沒有
Flutter用什麼技術構建的?
C, C++, Dart, and Skia (2D 渲染引擎)
Flutter如何將程式碼執行在Android上?
引擎的C/C++程式碼使用Android的NDK編譯的,並且框架的大部分和APP程式碼作為原生代碼(由Dart編譯器編譯的)執行的。
Flutter如何將程式碼執行在iOS上?
引擎的C/C++程式碼使用LLVM編譯,並且任何Dart程式碼都是AOT編譯成原生代碼。
Flutter使用了我的系統的原生(OEM)控制元件嗎?
沒有,Flutter提供了一系列的MD風格和Cuperitno(iOS風格)風格的控制元件,假如我們複用OEM控制元件,那麼FLutter APP的效能會被這些控制元件質量所限制。
FLutter支援哪些作業系統?
支援Linux, Mac和Windows。
開發FLutter使用什麼語言?
使用Dart語言,其底層圖表框架和Dart虛擬機器用C/C++實現。
為什麼FLutter選擇使用Dart?
選擇一門程式語言遵循如下標準:
*提高開發效率:一套程式碼執行在iOS和Android,極大地加速開發。
*面向物件:FLutter需要建立可視的使用者體驗,所以被選擇的語言應該是面向物件程式設計,並且在構建UI框架上經驗豐富。如果選擇非面嚮物件語言就是重複造輪子。
*可以預見的,高效能的:FLutter旨在讓開發者開發更迅速,讓使用者體驗更流暢。為了實現該目標,需要每個動畫幀能夠執行大量的程式碼,也意味著被選擇的語言能同時傳遞高效能和傳遞可預見的效能,而不是由於週期性停頓而引起丟幀。
*快速分配記憶體:FLutter框架使用了Rx響應式程式設計,它依賴於底層記憶體分配器(處理小而短的記憶體分配),所以被選擇的語言需要有該特性。
Dart語言滿足這四個條件,除此之外,我們還有機會與Dart社群一起近距離工作(不斷完善Dart以便在Flutter中更好的使用)。
Flutter引擎有多大?
2017年5月,我們測量了Flutter APP的最小尺寸(沒有MD風格,僅僅是Center控制元件),release版apk接近6.7M。在這個最小apk中,核心引擎大約3.3M,框架和APP程式碼約1.25M,LICENSE檔案(在app.flx中)約55k,必須的Java程式碼(classes.dex)是40k,還有2.1M的ICU資料。你也可以自己測量你的APP大小,執行flutter build apk 並檢視 app/outputs/apk/app-release.apk。
Flutter APP效能究竟如何?
效能很優秀,Flutter是為60fps而設計的,Flutter執行的是編譯後的程式碼,而不是解釋性程式,這意味著Flutter能快速啟動。
從IDE下載程式到手機需要多長時間?
Flutter有熱載入(hot reload)功能,亞秒級載入時間。熱載入功能是狀態保持的(stateful),也就是說熱載入後APP狀態是保留的,這意味著你可以快速重複螢幕內容而不需要從主螢幕開始載入。
熱載入與完全重啟哪裡不同?
熱載入是注入原始碼到執行中的Dart虛擬機器,包括增加新的類,和給已有類增加新的方法和變數以及修改已有方法。下面幾種情況熱載入無效:
*全域性變數初始化
*靜態變數初始化
*修改main()方法
Flutter APP支援的裝置和作業系統版本?
支援的手機作業系統:Android Jelly Bean, v16, 4.1.x or newer, and iOS 8 or newer
手機硬體:64-bit iOS 手機(從iPhone 5S開始), and ARM Android 手機。
支援Android 和iOS物理裝置,支援Android和iOS模擬器,不支援平板。
Flutter能在web上執行嗎?
不支援
Flutter支援開發桌面APP嗎?
手機開發優先,鼓勵以其他的方式使用開源的Flutter。
能在已經存在的原生APP中使用Flutter嗎?
可以,你可以嵌入Flutter檢視到你已經存在的Android和iOSAPP中,相關文件正在開發中。
能訪問跨平臺的服務和API嗎,比如感測器和本地儲存?
可以,Flutter支援開發者開箱即用來訪問一些平臺特性的服務和API。然而,為了避免大多數跨平臺API出現的”最小公分母”問題,我們不打算支援所有的跨平臺服務和API。最後,鼓勵開發者使用Flutter的非同步訊息來建立平臺和第三方API綜合體。
控制元件能夠繼承和自定義嗎?
當然可以,Flutter的控制元件系統被設計為很容易自定義。Flutter並沒有為每一個控制元件提供很多引數,而是提供創作。比如說,RaisedButton 控制元件並不是普通button控制元件的子類,而是Material 控制元件和GestureDetector控制元件的組合,前者提供視覺設計,後者提供互動設計。如果你想建立一個自定義視覺設計的button控制元件,可以與實現了你的視覺設計的GestureDetector控制元件相結合,比如說CupertinoButton控制元件。視覺設計與互動設計的結合創作賦予開發者最大的控制權,並且還能複用大量程式碼。我們已經將複雜的控制元件分解為多個獨立的控制元件(分別實現視覺,互動和手勢),你可以任意組合。
能與手機平臺預設程式語言互動嗎?
可以,能與開發Android的Java程式碼和開發iOS的 Objective-C或Swift互動,Flutter APP與手機平臺通過BasicMessageChannel傳遞訊息。
Flutter中的internationalization (i18n), localization (l10n), and accessibility (a11y)?
基本支援Android和iOS的 accessibility,鼓勵開發者使用 intl package(需翻牆)來 internationalization 和localization。
Flutter開發中並行和併發問題?
Flutter支援虛擬機器的堆隔離,所以支援並行,隔離後通過非同步訊息通訊。暫不支援共享記憶體併發解決方案。
Flutter能使用JSON/XML/protobuffers等嗎?
Flutter能開發3D (OpenGL) APP嗎?
暫不支援
為什麼APK 或 IPA包這麼大?
一般assets資料夾包括圖片,音訊檔案和字型等佔據了apk或IPA主要體積。同時release版本比debug版本要小很多。
為什麼build()方法在State物件裡而不是在StatefulWidget控制元件裡?
這是為了當子類是StatefulWidget控制元件的時候給予開發者更多彈性控制元件,詳情請參考
為什麼APP右上角有“Slow Mode”條幅?
這是因為使用了除錯模式,安裝release版本就沒有了。
蘋果公司會拒絕Flutter APP嗎?
目前是允許的,雖然蘋果公司的政策每年都會變化,但我們會盡全力保證Flutter APP能釋出到蘋果公司的App Store。
這篇文章主要回答了一些關於Flutter的常見問題,如果你對Flutter一無所知,那麼閱讀完這篇文章後對Flutter的各方面算是瞭解了,Flutter值得花精力學習嗎,Flutter的成熟度與穩定性,Flutter的未來趨勢怎麼樣等等這類問題相信你心中有了自己的答案。