引言
在 Flutter 剛剛從 Google 剛剛推向 Android 市場的時候,我就開始對 Flutter 開始了學習之路;但由于當時 Flutter 許多東西尚未完善而沒有推出穩定的版本,是以也就沒有對其進行深入的學習,直到如今 Flutter 又重出江湖,在市場上也得到了蓬勃發展及許多業内大佬的力推,我便又再次入坑 Flutter
實作 UI 和互動是進階開發者的必備技能,也是掌握 Flutter 開發的重點;同樣 Flutter 跨平台的特性是原生不能比拟的,更何況還有不弱的性能表現;而性能往往是由生命周期來決定的
何為 Flutter 的生命周期?
如果你是一名開發人員,那麼你一定不會對生命周期感到陌生;當你在學習 Flutter 的時候,Flutter 也有自己的生命周期,隻有通過了解 Flutter 的生命周期,才能知道應該在哪裡來寫業務邏輯
Flutter 生命周期
如上圖所示,Flutter 生命周期大體上可以分為三個階段: 初始化、狀态變化、銷毀;下面依次說明各個階段的工作
初始化階段(插入渲染樹)
- 對應執行構造方法和 initState
狀态變化階段(在渲染樹中存在)
- 開新的 widget 或者調用setState方法
銷毀階段(從渲染樹種移除)
- deactivate和 dispose
如果之前你對 Flutter 有一點點了解的話,你會發現 Flutter 中有兩個主要的 Widget: StatelessWidget(無狀态) 和 StatefulWidget(有狀态)
StatelessWidget
- 無狀态元件]是不可變的,這意味着它們的屬性不能變化,所有的值都是最終的;可以了解為将外部傳入的資料轉化為界面展示的内容,隻會渲染一次
- 對于無狀态元件生命周期隻有 build 這個過程;無狀态元件的建構方法通常隻在三種情況下會被調用:小元件第一次被插入樹中,小元件的父元件改變其配置,以及它所依賴的 InheritedWidget 發生變化時
StatefulWidget
- 有狀态元件持有的狀态可能在 Widget 生命周期中發生變化,是定義互動邏輯和業務邏輯;可以了解為具有動态可互動的内容界面,會根據資料的變化進行多次渲染
實作一個 StatefulWidget 至少需要兩個類:
一個是 StatefulWidget 類 另一個是 Sate 類
- StatefulWidget 類本身是不可變的,但是 State 類在 Widget 生命周期中始終存在
- StatefulWidget 将其可變的狀态存儲在由 createState 方法建立的 State 對象中,或者存儲在該 State 訂閱的對象中
Fultter 的優勢在哪裡?
快速開發和疊代
Flutter 自身具有熱修複(熱重載)的功能,盡管有使用的限制,但是它依然能夠為開發過程提供更高的效率;另外,Flutter SDK 還允許我們修複崩潰和繼續從應用程式停止的地方進行調試
頁面流暢、樣式美觀
對于不同的平台(Android和iOS),Flutter 提供了風格不同的控件,以滿足不同平台的設計理念
提供原生性能
Flutter 提供了一種響應式視圖,無須 JavaScript 做橋接;強大的 API 使得實作複雜的頁面效果成為可能;高性能的渲染機制使得 120 FPS 的高頻率 可以輕而易舉的實作;當界面上的圖檔數量越來越多時,與 React Native 相比,Flutter的優勢會越來越明顯
靈活的跨平台開發
Flutter 可以單獨作為開發架構完成整個 App 的開發,也可以與現有原生代碼相結合實作 Hybrid 混合模式的開發
那 Flutter 需要學嗎?
Flutter 抛棄了原生系統控件和 Webview,使用自研高性能渲染引擎來繪制 Widget,預先 (AOT) 編譯,運作時直接執行 Native(arm) 代碼,Dart 代碼執行(在 UI TaskRunner),圖檔下載下傳 (IO TaskRunner),真正的渲染 (GPU TaskRunner) ,同平台的通信等 (Platform TaskRunner 即 Native 概念下的主線程)是互相隔離的
針對布局等的優化;布局計算時單次樹走動即可完成;Relayout Boundary 機制:如果 Child 的 size 是固定的,那麼不會因為 Child 的 Relayout 導緻 Parent ReLayout 等布局優化,都讓 Flutter 脫穎而出
如上所述 Flutter 于谷歌而言,這是他們重新整理 跨平台生态環境 決心的展現,Flutter 所展現的内容,也是谷歌想拓展和維護的方向;對于長期苦惱于 跨平台 選擇的廣大 Android 開發者 而言,Flutter 可謂是谷歌為我們提供的 指路明燈
以目前的開發速度,隻要不出大的纰漏,按部就班的往前推進,在不久的将來, Google 一定可以把 Flutter 平台打造得非常完美,屆時又會改變移動開發技術的格局了
也許,Flutter 系列的部分庫還沒成熟到成為你工作的第一選擇,但是,深入學習 Flutter 元件會為你日常的開發帶來一些想法
總的來說,Flutter 對廣大開發者而言是 利遠遠大于弊的
該如何去學習 Flutter?
這裡給大家推薦一套 Flutter 開發學習路線,并附有相關《Flutter 開發核心知識點及源碼解析筆記》,相信可以給大家提供一些幫助,有需要的朋友們也可以拿去查漏補缺;有需要的小夥伴:可以私信發送 "Flutter 進階" 即可 直達擷取!
手冊内容展示如下
Dart 文法詳解
Flutter 編譯模式
Dart 文法進階
Flutter 線程管理
Flutter 項目實戰
Flutter 性能監控
以上的知識點内容都是免費擷取的,有興趣的小夥伴:可以私信發送 "Flutter 進階" 即可 直達擷取;覺得手冊内容有用的話,大家可以點贊分享一下