
這是Flutter系列第一篇文章,后續會持續更新Flutter相關知識,本篇就主要對于Flutter技術做一個簡單的入門介紹
一、Flutter簡介??
Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構建高質量的原生用戶界面, Flutter可以與現有的代碼一起作業,在全世界,Flutter正在被越來越多的開發者和組織使用,并且Flutter是完全免費、開源的,可以用一套代碼同時構建Android和iOS應用,性能可以達到原生應用一樣的性能,
一句話總結就是:Flutter是一個跨平臺、高性能的移動UI框架
??跨平臺
Flutter使用自己的高性能渲染引擎來繪制 Widget([?w?d??t]),這樣可以保證在 Android 和iOS 上 UI 的一致性,目前 Flutter 已經支持 iOS、Android、Web、Windows、macOS、Linux、Fuchsia(Google新的自研作業系統)等眾多平臺,
??高性能
Flutter的高性能主要靠兩點來保證:
- 采用 Dart 語言開發
- 使用自己的渲染引擎來繪制 UI
Dart語言在JIT模式下,執行速度與 JavaScript 基本持平,但是它支持AOT,以 AOT模式運行時,JavaScript 便遠遠追不上了,執行效率也就大大提升,并且Flutter使用自己的渲染引擎繪制UI,布局資料都由Dart語言直接控制,性能開銷比較可觀
下面看看Flutter與其他跨平臺的移動開發技術比較:
| 技術型別 | UI渲染方式 | 性能 | 開發效率 | 動態化 | 框架代表 |
|---|---|---|---|---|---|
| H5 + 原生 | WebView渲染 | 一般 | 高 | 支持 | Cordova、Ionic |
| JavaScript + 原生渲染 | 原生控制元件渲染 | 好 | 中 | 支持 | RN、Weex |
| 自繪UI + 原生 | 呼叫系統API渲染 | 好 | Flutter高, Qt低 | 默認不支持 | Qt、Flutter |
二、采用Dart語言開發
采用Dart語言開發,顧名思義檔案擴展名以 .dart 結尾,
Flutter為什么會選擇 Dart 語言而不選擇我們前端鮮為人知的 JavaScript 呢?
??開發效率高
- Flutter 在開發階段采用,采用 JIT 模式,這樣就避免了每次改動都要進行編譯,極大的節省了開發時間
- Flutter 在發布時可以通過 AOT 生成高效的機器碼以保證應用性能,而 JavaScript 則不具有這個能力
??高性能
- Flutter 中能夠在每個影片幀中運行大量的代碼,這意味著需要一種既能提供高性能的語言,而不會出現會丟幀的周期性暫停,而 Dart 支持 AOT,在這一點上可以做的比 JavaScript 更好
??快速分配記憶體
型別安全和空安全
- Dart 是型別安全的語言,支持靜態型別檢測,可以在編譯前發現一些型別的錯誤,并排除潛在問題
- JavaScript 是一個弱型別語言,需要給JavaScriptdiamagnetic添加靜態型別檢測的擴展語言和工具
三、Flutter框架結構
這里對Flutter的框架做一個整體介紹,可以有個整體印象

簡單來講,Flutter 從上到下可以分為三層:框架層、引擎層和嵌入層
??框架層
- 底下兩層被合并為一個dart UI層,對應的是Flutter中的
dart:ui包,它是 Flutter Engine 暴露的底層UI庫,提供影片、手勢及繪制能力, - Rendering 渲染層,依賴于 Dart UI 層,渲染層會構建一棵由可渲染物件的組成的渲染樹,當動態更新這些物件時,渲染樹會找出變化的部分,然后更新渲染,渲染層可以說是Flutter 框架層中最核心的部分,它除了確定每個渲染物件的位置、大小之外還要進行坐標變換、繪制(呼叫底層 dart:ui ),
- Widgets 層是 Flutter 提供的的一套基礎組件庫,在基礎組件庫之上,Flutter 還提供了 Material 和 Cupertino 兩種視覺風格的組件庫,它們分別實作了 Material 和 iOS 設計規范,
??引擎層
引擎層是Flutter的核心,由C++實作,其中包括了 Skia 引擎、Dart 運行時、文字排版引擎等,在代碼呼叫 dart:ui庫時,呼叫最侄訓走到引擎層,然后實作真正的繪制和顯示
??嵌入層
嵌入層主要是將 Flutter 引擎 ”安裝“ 到特定平臺上,Flutter 代碼可以通過嵌入層,以模塊方式集成到現有的應用中,也可以作為應用的主體
Flutter基礎介紹就到這里,下一篇講解Flutter開發環境搭建~~
*****注意??:本系列均參照Flutter官網進行整理*****
本文來自博客園,作者:不知名前端李小白,轉載請注明原文鏈接:https://www.cnblogs.com/libo-web/p/16059411.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/449806.html
標籤:其他
