Flutter由于上手難度低,性能體驗(yàn)好,特別大廠的力推,加速了它發(fā)展的腳步。
此系列文章僅用于自己學(xué)習(xí),參考鏈接在文章結(jié)尾
組件 Widget
Flutter 中的組件與前端組件的理解和作用基本一致,但是沒有一個(gè)明確的概念解釋 Flutter 組件,這里我借用前端的組件定義來解釋 Flutter 組件的概念。
一個(gè) Flutter 組件,包含了組件的模板、樣式和交互等內(nèi)容,外部只要按照組件設(shè)定的屬性、函數(shù)及事件處理等進(jìn)行調(diào)用即可,完全不用考慮組件的內(nèi)部實(shí)現(xiàn)邏輯。其中組件又包括無狀態(tài)組件和有狀態(tài)組件。
1.無狀態(tài)組件
無狀態(tài)組件,可以理解為將外部傳入的數(shù)據(jù)轉(zhuǎn)化為界面展示的內(nèi)容,只會(huì)渲染一次。
2.有狀態(tài)組件
有狀態(tài)組件,是定義交互邏輯和業(yè)務(wù)數(shù)據(jù),可以理解為具有動(dòng)態(tài)可交互的內(nèi)容界面,會(huì)根據(jù)數(shù)據(jù)的變化進(jìn)行多次渲染。
生命周期
在原生 Android 、原生 iOS 、前端 React 或者 Vue 都存在生命周期的概念,在 Flutter 中一樣存在生命周期的概念,其基本概念和作用相似。 Flutter 中說的生命周期,也是指有狀態(tài)組件,對(duì)于無狀態(tài)組件生命周期只有 build 這個(gè)過程,也只會(huì)渲染一次,而有狀態(tài)組件則比較復(fù)雜,下面我們就來看看有狀態(tài)組件的生命周期過程。
Flutter 中的生命周期,包含以下幾個(gè)階段:
- createState ,該函數(shù)為 StatefulWidget 中創(chuàng)建 State 的方法,當(dāng) StatefulWidget 被調(diào)用時(shí)會(huì)立即執(zhí)行 createState 。
- initState ,該函數(shù)為 State 初始化調(diào)用,因此可以在此期間執(zhí)行 State 各變量的初始賦值,同時(shí)也可以在此期間與服務(wù)端交互,獲取服務(wù)端數(shù)據(jù)后調(diào)用 - - setState 來設(shè)置 State。
- didChangeDependencies ,該函數(shù)是在該組件依賴的 State 發(fā)生變化時(shí),這里說的 State 為全局 State ,例如語(yǔ)言或者主題等,類似于前端 Redux 存儲(chǔ)的 State 。
- build ,主要是返回需要渲染的 Widget ,由于 build 會(huì)被調(diào)用多次,因此在該函數(shù)中只能做返回 Widget 相關(guān)邏輯,避免因?yàn)閳?zhí)行多次導(dǎo)致狀態(tài)異常。
- reassemble ,主要是提供開發(fā)階段使用,在 debug 模式下,每次熱重載都會(huì)調(diào)用該函數(shù),因此在 debug 階段可以在此期間增加一些 debug 代碼,來檢查代碼問題。
- didUpdateWidget ,該函數(shù)主要是在組件重新構(gòu)建,比如說熱重載,父組件發(fā)生 build 的情況下,子組件該方法才會(huì)被調(diào)用,其次該方法調(diào)用之后一定會(huì)再調(diào)用本組件中的 build 方法。
-
deactivate ,在組件被移除節(jié)點(diǎn)后會(huì)被調(diào)用,如果該組件被移除節(jié)點(diǎn),然后未被插入到其他節(jié)點(diǎn)時(shí),則會(huì)繼續(xù)調(diào)用 dispose 永久移除。
dispose ,永久移除組件,并釋放組件資源。
3-2.jpg.png
整個(gè)過程分為四個(gè)階段:
- 初始化階段,包括兩個(gè)生命周期函數(shù) createState 和 initState;
- 組件創(chuàng)建階段,也可以稱組件出生階段,包括 didChangeDependencies 和 build;
- 觸發(fā)組件多次 build ,這個(gè)階段有可能是因?yàn)?didChangeDependencies、setState 或者 didUpdateWidget 而引發(fā)的組件重新 build ,在組件運(yùn)行過程中會(huì)多次被觸發(fā),這也是優(yōu)化過程中需要著重需要注意的點(diǎn);
- 最后是組件銷毀階段,deactivate 和 dispose。
學(xué)習(xí)地址:
