關於Flutter 您必須知道的知識點!!!

Flutter.jpg
Flutter 是一套高效的跨平臺免費開源 SDK,能夠幫助開發者用一套代碼同時在 Android 和 iOS 上構建媲美原生體驗的精良應用。隨着Flutter 1.0 的正式到來,咱們從社區中也蒐集到了很多開發者關注的問題,咱們會用連載的形式由淺到深地爲開發者們進行解答。若是您對 Flutter 已經有必定的瞭解,不妨在看到問題的時候先試着回答,而後和咱們給出的答案進行比較,從而進一步加深理解。

介紹篇

Flutter 是什麼?

react

Flutter 是 Google 的移動應用 SDK,用於在極短期內在 Android 和 iOS 平臺上建立高質量的原生體驗。Flutter 能夠和既有代碼相容,世界各地的不少開發者和組織都在使用它,而且它是免費和開源的。面試

Flutter 能作什麼?

編程

對於應用的用戶來講,Flutter 可讓他們體驗到美觀靈活的 UI。性能優化

對於開發者來講,Flutter 下降了建立移動應用的門檻。它加速了移動應用的開發,下降了兼顧 Android 和 iOS 應用開發的成本和複雜性。網絡

對於設計師而言,Flutter 能夠確保精確地實現設計意圖,而無需下降保真度或被迫進行妥協。在設計師的手裏,Flutter 還能夠做爲一種高效的原型設計工具。架構

哪些人會用到 Flutter?

併發

Flutter 適用於但願快速構建精美的移動應用,或者但願用一套代碼庫覆蓋更多用戶的開發者。框架

Flutter 也適用於須要領導移動開發團隊的開發管理人員。Flutter 可讓開發管理人員打造一個統一的移動應用開發團隊,以便更快地開發更多功能,同時將相同的功能部署到 Android 和 iOS 版本的應用中,並下降維護成本。less

雖然設計師羣體不是 Flutter 最初的目標受衆,但 Flutter 也適用於那些但願將原始設計意圖高保真地傳遞給全部移動用戶的設計師。異步

說到底,若是您想要漂亮的應用,使人愉悅的動效和動畫,以及富有個性和身份感的 UI,那您就是 Flutter 的目標用戶。

我須要擁有怎樣的開發經驗才能使用 Flutter?

若是您熟悉面向對象概念 (類、方法、變量等) 和指令式編程概念 (循環、條件等) ,您會發現 Flutter 很容易上手。

不過須要強調的是,學習和使用 Flutter 無需具有移動領域的開發經驗。

就咱們親歷過的例子來講,編程經驗並不豐富的人們同樣能夠學習並使用 Flutter 進行原型設計和應用開發。

我能夠用 Flutter 構建怎樣的應用?

Flutter 針對在 Android 和 iOS 上運行的 2D 移動應用進行了優化。

若是您的應用強烈須要表達出品牌個性,Flutter 會很是適合。不過,即使您想要打造的應用看起來像是股票平臺那樣複雜,也可使用 Flutter 來構建。

Flutter 能夠構建功能齊全的應用,包括使用攝像頭、地理位置、網絡、存儲、第三方 SDK 等。

Flutter 有哪些獨到之處?

Flutter 與大多數用來構建移動應用的工具不一樣,由於它既不使用 WebView,也不使用設備附帶的 OEM Widget,而是使用本身的高性能渲染引擎來繪製 Widget。

Flutter 與其它工具的不一樣之處還在於,它只有一層簡潔的 C/C++ 代碼,在這之上,Flutter 使用 Dart (一種現代化的、簡潔的面嚮對象語言) 實現其大部分系統功能 (佈局、手勢、動畫、框架、Widget 等),這種語言使得開發者能夠輕鬆地進行閱讀、更改、替換或刪除。

這些特性都爲開發者提供了巨大的系統控制權限,同時顯著下降了訪問大多數系統功能的門檻。

內容篇

Flutter SDK 裏有什麼?

高度優化的針對移動應用的 2D 渲染引擎,更具有出色的文字支持功能、現代化的 react 風格框架、適用於 Android 和 iOS 的豐富 Widget、用於單元和集成測試的 API、用於鏈接系統和第三方 SDK 的互操做及插件 API、無界面 (headless) 測試運行器,用於在 Windows、Linux 和 Mac 上運行測試、命令行工具,用於建立、構建、測試和編譯應用。

用 Flutter 開發時可使用哪些編輯器或 IDE ?

能夠經過插件的方式使用 Android Studio、IntelliJ IDEA 和 VS Code 進行 Flutter 開發。您也能夠在命令行中使用 flutter 命令,並配合能編輯 Dart 語言的編輯器進行開發。

Flutter 裏存在開發框架嗎?

是的,Flutter 自帶了現代化的開發框架,靈感正是來自 React。Flutter 的框架旨在實現分層、可定製 (以及靈活的開發選項)。開發者能夠選擇僅使用框架的一部分,或是使用另外的框架。

Flutter 裏存在 Widget 嗎?

是的,Flutter 自帶了一套高品質的 Material Design 和 Cupertino (iOS 風格) Widget、佈局和主題。固然,這些 Widget 只是一個起點。Flutter 的設計目的就是,讓您輕鬆建立本身的 Widget,或是定製現有的 Widget。

Flutter 支持 Material 主題定製 (Theming) 嗎?

是的,Flutter 和 Material 團隊密切合做,徹底支持 Material Theming。

Flutter 帶有測試框架嗎?

是的,Flutter 提供用於編寫單元和集成測試的 API。咱們使用本身的測試功能來測試咱們的 SDK,每次提交代碼前咱們都會測量提交的測試覆蓋率。

Flutter 和 ReactNative( RN ) 的異同?

RN 是使用JS代碼調用系統的原生控件,最高支持 60fps。 Flutter 不使用系統的原生控件, Flutter 基於GPU渲染,因此確保了 高性能,最高支持120fps,甚至不輸原生。 Flutter只須要維護一套UI 代碼:Flutter 在IOS和Android 是一套 UI 風格組件,因此 Flutter 須要作不多適配,由於上層只有一套UI代碼。RN是同一套代碼在IOS和Android顯示不一樣的風格,須要適配維護兩個代碼庫。 相同點: 和RN相似,基於組件開發Weight,一切皆組件。

Flutter引擎有多大?

官方曾測量了一個最小的 Flutter 應用(不含 Material 組件,僅有一個 Center 控件,使用 flutter build apk 構建),並打包爲 release 版本,大小約爲 4.06 MB。該APP:核心引擎大約爲 2.7MB(已壓縮),框架和應用程序代碼大約 820.6KB (已壓縮),LICENSE 文件爲 53.5KB(已壓縮),必要的 Java 代碼 (classes.dex) 爲 61.8KB(已壓縮),此外還有大約 450.4KB(已壓縮)的 ICU 數據。

所以相對應用程序,Flutter的引擎並不大。

Flutter能夠構建桌面應用程序嗎?

能夠,但目前專一於移動端優先。將來會支持 WIndows , Mac 和 Linux。

Flutter的標記語言在哪裏?

爲何Flutter沒有標記語法(相似於Android的XML佈局文件)?

和Android原生開發不一樣,使用代碼動態構建的UI會更靈活:

  • 嚴格的標記系統難以表達和生成具備特定行爲的widget。

  • 「代碼優先」更好地支持熱重載和動態環境適應等功能。

能夠在Flutter中使用JSON 嗎?

必須能夠,有關如何在Flutter中使用JSON的教程,請參閱 JSON教程。

Flutter支持和原生混合開發麼?能夠在當前原生APP中嵌入Flutter麼?

能夠,目前能夠在現有的Android或iOS應用中嵌入Flutter,可是當前可能不太完善。 這裏是官方文檔以供參考。

爲何Flutter選擇使用Dart語言?

Dart運行時和編譯器支持Flutter的混合編譯:

基於JIT的快速開發週期:容許使用類型的語言進行形狀更改和有狀態的熱重載

基於AOT編譯器,可生成高效的ARM代碼,能夠快速啓動並擁有可預測的生產部署性能。

Dart由谷歌維護,Dart社區正在積極投入資源改進Dart在Flutter中的使用。

Dart語言效率高,這點最重要!!!,這對framework團隊和開發人員都很是重要。由於大部分Flutter功能都是用Dart實現,所以咱們須要在10萬行代碼時能保持高效的而不會犧牲framework和widget的可讀性。

Dart面向對象。絕大多數開發人員都具備面向對象開發的經驗,所以更容易學習如何使用Flutter進行開發。

Dart可預測,高性能。 Flutter框架使用函數式流,它很大程度上依賴於底層的內 存分配器,從而有效地處理小的、短時間的內存分配會很是重要,因此在缺 乏此功能的語言中Flutter沒法有效地工做。

Flutter是什麼語言編寫的?

Flutter的不一樣是由於它核心只有一層輕量的C/C++代碼。Flutter在Dart中實現了其它大部分系統(組合、手勢、動畫、框架、widget等),開發人員能夠輕鬆地進行讀取、更改、替換或移除。這爲開發人員提供了對系統的巨大可定製性。

Flutter框架使用什麼編程範式?

Flutter是一個多範式編程環境。 集合了過去十多年優秀的開發範式:

組合:Flutter使用的主要範例是使用小對象,而後將它們組合在一塊兒以得到更復雜的對象。好比Weight之間的相互嵌套。

函數式編程:整個應用程序能夠僅使用StatelessWidget來構建 ,這些函數本質上是描述參數如何映射到其餘函數的函數。

事件驅動:用戶交互由事件對象表示,這些事件對象被分派給註冊了事件處理程序的回調。屏幕刷新也由相似的回調機制觸發。

基於類的面向對象編程:框架的大部分API都是使用繼承類來構建的。咱們使用一種方法來在基類中定義很是抽象的API,而後在子類中迭代地對它們進行定製化。

命令式編程:直接命令式編程一般與對象內部封裝的狀態配對,用於提供最直觀的解決方案。

響應式編程:widget和元素樹有時被描述爲響應式的,由於在widget的構造函數中提供的新輸入會當即做爲widget的構建方法對較低級別widget的更改傳播,並在較低widget中進行更改(例如,做爲響應到用戶輸入)經過事件處理程序傳播回widget樹。

泛型:泛型檢測可用於幫助開發人員及早發現編程錯誤。Flutter框架使用泛型編程來處理這個問題。

併發:Flutter大量使用異步API。例如,動畫系統經過Future來完成動畫完成時的通知。圖像加載系統一樣使用Future在加載完成時進行報告。

約束:Flutter中的佈局系統使用弱形式的約束編程來肯定佈局的幾何形狀。約束(例如,父控件將大小約束傳給子控件)知足這些限制。經過使用這種技術,Flutter能夠更加精準的控制佈局。

最後送福利了,如今關注我而且加入羣聊能夠獲取包含源碼解析,自定義View,動畫實現,架構分享等。 內容難度適中,篇幅精煉,天天只需花上十幾分鍾閱讀便可。 你們能夠跟我一塊兒探討,歡迎加羣探討,有flutter—性能優化—移動架構—資深UI工程師 —NDK相關專業人員和視頻教學資料,還有更多面試題等你來拿~ 羣號:661841852

QQ截圖20190510143109.jpg

點我加入羣聊【Android開發行業交流】

相關文章
相關標籤/搜索