講到生命週期,Android主要是Activity的生命週期,對Flutter來說,萬物皆是widget,生命週期是解決一些問題的基礎。
StatefulWidget常見的場景,StatelessWidget生命週期只有一個build。
1.新打開widget A
A createState ---> A initState --->A didChangeDependencies --->A build
2.widget A切換 widget B
B createState ---> B initState --->B didChangeDependencies --->B build ---> A deactivate ---> A build
3. widget B退出 返回widget A
A deactivate ---> A build---> B deactivate ---> B dispose
4.widget A hot reload 熱重載
A didUpdateWidget ---> A build
5.widget A setState
A build
簡單介紹下
createState 創建組件狀態 只調用一次
initState 初始化組件狀態 只調用一次
didChangeDependencies 改變組件依賴關係 initState 時會調用,除此之外,如同其名,在改變依賴關係時,才會再次調用。當StatefulWidget依賴的InheritedWidget發生變化時,didChangeDependencies 才會調用。didChangeDependencies方法調用不僅一次。
(備註:InheritedWidget 組件間傳遞數據)
build 創建組件 多次調用,如果棧內有多個widget,當再次跳轉界面時,棧內未銷燬的widget全部都會執行一遍deactivate ---> build。
didUpdateWidget 更新組件,熱更新hot reload必會調用,按道理使用setState方法,子widget會調用該方法。多次調用。
deactivate 解除 組件被移除時調用,多次調用。
dispose 銷燬 組件被銷燬時調用,只調用一次。