Flutter入門,開發者需要知道的10個知識點

雷加發表於2019-03-21

Flutter入門,開發者需要知道的10個知識點

  1. Flutter 和 ReactNative( RN ) 的異同?

    1. RN 是使用JS程式碼呼叫系統的原生控制元件,最高支援 60fps。 Flutter 不使用系統的原生控制元件, Flutter 基於GPU渲染,所以確保了 高效能,最高支援120fps,甚至不輸原生。
    2. Flutter只需要維護一套UI 程式碼:Flutter 在IOS和Android 是一套 UI 風格元件,所以 Flutter 需要做很少適配,因為上層只有一套UI程式碼。RN是同一套程式碼在IOS和Android顯示不同的風格,需要適配維護兩個程式碼庫。
    3. 相同點: 和RN類似,基於元件開發Widget,一切皆元件
  2. 誰創造了Flutter?
    Flutter是一個開源專案。目前,大部分的開發工作都是由Google的工程師完成的。現在越來越多的社群開發者加入。

  3. 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的引擎並不大。

  4. Flutter可以構建桌面應用程式嗎?
    可以,但目前專注於移動端優先。未來會支援 WIndows , Mac 和 Linux。

  5. Flutter的標記語言在哪裡?為什麼Flutter沒有標記語法(類似於Android的XML佈局檔案)?
    和Android原生開發不同,使用程式碼動態構建的UI會更靈活:
    1. 嚴格的標記系統難以表達和生成具有特定行為的widget。
    2. “程式碼優先”更好地支援熱過載和動態環境適應等功能。

  6. 可以在Flutter中使用JSON 嗎?
    必須可以,有關如何在Flutter中使用JSON的教程,請參閱 JSON教程

  7. Flutter支援和原生混合開發麼?可以在當前原生APP中嵌入Flutter麼?
    可以,目前可以在現有的Android或iOS應用中嵌入Flutter,但是當前可能不太完善。 這裡是官方文件以供參考。

  8. 為什麼Flutter選擇使用Dart語言?

    1. Dart執行時和編譯器支援Flutter的混合編譯
      1. 基於JIT的快速開發週期:允許使用型別的語言進行形狀更改和有狀態的熱過載
      2. 基於AOT編譯器,可生成高效的ARM程式碼,可以快速啟動並擁有可預測的生產部署效能。
    2. Dart由谷歌維護,Dart社群正在積極投入資源改進Dart在Flutter中的使用。
    3. Dart語言效率高,這點最重要!!!,這對framework團隊和開發人員都非常重要。因為大部分Flutter功能都是用Dart實現,因此我們需要在10萬行程式碼時能保持高效的而不會犧牲framework和widget的可讀性。
    4. Dart物件導向。絕大多數開發人員都具有物件導向開發的經驗,因此更容易學習如何使用Flutter進行開發。
    5. Dart可預測,高效能。 Flutter框架使用函式式流,它很大程度上依賴於底層的內 存分配器,從而有效地處理小的、短期的記憶體分配會非常重要,所以在缺 乏此功能的語言中Flutter無法有效地工作。
  9. Flutter是什麼語言編寫的?
    Flutter的不同是因為它核心只有一層輕量的C/C++程式碼。Flutter在Dart中實現了其它大部分系統(組合、手勢、動畫、框架、widget等),開發人員可以輕鬆地進行讀取、更改、替換或移除。這為開發人員提供了對系統的巨大可定製性。
    知識點分享flutter架構

  10. Flutter框架使用什麼程式設計正規化?
    Flutter是一個多正規化程式設計環境。 集合了過去十多年優秀的開發正規化:

    1. 組合:Flutter使用的主要範例是使用小物件,然後將它們組合在一起以獲得更復雜的物件。比如Widget之間的相互巢狀。
    2. 函數語言程式設計:整個應用程式可以僅使用StatelessWidget來構建 ,這些函式本質上是描述引數如何對映到其他函式的函式。
    3. 事件驅動:使用者互動由事件物件表示,這些事件物件被分派給註冊了事件處理程式的回撥。螢幕重新整理也由類似的回撥機制觸發。
    4. 基於類的物件導向程式設計:框架的大部分API都是使用繼承類來構建的。我們使用一種方法來在基類中定義非常抽象的API,然後在子類中迭代地對它們進行定製化。
    5. 指令式程式設計:直接指令式程式設計通常與物件內部封裝的狀態配對,用於提供最直觀的解決方案。
    6. 響應式程式設計:widget 和元素樹有時被描述為響應式的,因為在 widget 的建構函式中提供的新輸入會立即作為 widget 的構建方法對較低階別 widget 的更改傳播,並在較低 widget 中進行更改(例如,作為響應到使用者輸入)通過事件處理程式傳播回widget樹。
    7. 泛型:泛型檢測可用於幫助開發人員及早發現程式設計錯誤。Flutter框架使用泛型程式設計來處理這個問題。
    8. 併發:Flutter大量使用非同步API。例如,動畫系統通過Future來完成動畫完成時的通知。影像載入系統同樣使用Future在載入完成時進行報告。
    9. 約束:Flutter中的佈局系統使用弱形式的約束程式設計來確定佈局的幾何形狀。約束(例如,父控制元件將大小約束傳給子控制元件)滿足這些限制。通過使用這種技術,Flutter可以更加精準的控制佈局。

相關文章