Flutter State生命週期
阿新 • • 發佈:2022-05-23
-
initState
:當 widget 第一次插入到 widget 樹時會被呼叫,對於每一個State物件,Flutter 框架只會呼叫一次該回調,所以,通常在該回調中做一些一次性的操作,如狀態初始化、訂閱子樹的事件通知等。 -
didChangeDependencies()
:當State物件的依賴發生變化時會被呼叫; -
build()
:它主要是用於構建 widget 子樹的,會在如下場景被呼叫:- 在呼叫
initState()
之後。 - 在呼叫
didUpdateWidget()
之後。 - 在呼叫
setState()
之後。 - 在呼叫
didChangeDependencies()
之後。 - 在State物件從樹中一個位置移除後(會呼叫deactivate)又重新插入到樹的其它位置之後。
- 在呼叫
-
reassemble()
:此回撥是專門為了開發除錯而提供的,在熱過載(hot reload)時會被呼叫,此回撥在Release模式下永遠不會被呼叫。 -
didUpdateWidget ()
:在 widget 重新構建時,Flutter 框架會呼叫widget.canUpdate
來檢測 widget 樹中同一位置的新舊節點,然後決定是否需要更新,如果widget.canUpdate
返回true
則會呼叫此回撥。正如之前所述,widget.canUpdate
會在新舊 widget 的key
和runtimeType
同時相等時會返回true,也就是說在在新舊 widget 的key和runtimeType同時相等時didUpdateWidget()
-
deactivate()
:當 State 物件從樹中被移除時,會呼叫此回撥。在一些場景下,Flutter 框架會將 State 物件重新插到樹中,如包含此 State 物件的子樹在樹的一個位置移動到另一個位置時(可以通過GlobalKey 來實現)。如果移除後沒有重新插入到樹中則緊接著會呼叫dispose()
方法。 -
dispose()
:當 State 物件從樹中被永久移除時呼叫;通常在此回撥中釋放資源。