1. 程式人生 > >Flutter學習之旅(三)----Flutter常見問題FAQ,看完之後不再是Flutter小白

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的未來趨勢怎麼樣等等這類問題相信你心中有了自己的答案。