Flutter之 State 生命週期

State 的生命週期,指的是在用戶參與的狀況下,其關聯的 Widget 所經歷的,從建立到顯示,再到更新最後到中止,直至銷燬等各個階段函數

不一樣的階段涉及到特定的任務處理ui

State 的生命週期流程以下圖所示cdn

file

由圖可知:State 的生命週期能夠分爲三個階段:建立(插入視圖樹)、更新(在視圖樹中存在)、銷燬(從視圖樹中移除)對象

建立

State 初始化時會依次執行:構造方法 -> initState -> didChangeDependencies -> build,隨後完成頁面渲染blog

  • 構造方法:State 生命週期的起點,Flutter 會經過調用 StatefulWidget.createState() 來建立一個 State。能夠經過構造方法,來接收父 Widget 傳遞的初始化 UI 配置數據,而這些配置數據,決定了 Widget 最初的呈現狀態
  • initState:在 State 對象被插入視圖樹時調用。在 State 的生命週期中只會被調用一次,所以能夠在 initState 函數中作一些初始化操做
  • didChangeDependencies:專門用來處理 State 對象依賴關係變化,會在 initState() 調用結束後調用
  • build:構建視圖。通過構造方法、initState、didChangeDependencies 後,Framework 認爲 State 已經準備就緒,因而便調用 build。在 build 中,須要根據父 Widget 傳遞過來的初始化配置數據及 State 的當前狀態,建立一個 Widget 而後返回
更新

Widget 的狀態更新,主要由 setState、didChangeDependencies 和 didUpdateWidget 觸發生命週期

  • setState:當狀態數據發生變化時,能夠經過調用 setState 方法告訴 Flutter 使用更新後數據重建 UI
  • didChangeDependencies:State 對象的依賴關係發生變化後,Flutter 會回調該方法,隨後觸發組件構建。State 對象依賴關係發生變化的典型場景:系統語言 Locale 或應用主題改變時,系統會通知 State 執行 didChangeDependencies 回調方法
  • didUpdateWidget:Widget 的配置發生變化時,或熱重載時,系統會回調該方法

一旦這三個方法被調用,Flutter 隨後便會銷燬舊的 Widget,並調用 build 方法重建 Widgetci

銷燬

組件銷燬相對建立和更新而言更簡單。好比頁面銷燬時或是組件被移除時,系統會調用 deactivate 和 dispose 這兩個方法,來移除或銷燬組件資源

  • 當組件的可見狀態發生變化時,deactivate 方法會被調用,這時 State 會被暫時從視圖樹中移除。
    注意:頁面切換時,因爲 State 對象在視圖樹中的位置發生了變化,須要先暫時移除後再從新添加,從新觸發組件構建,所以也會調用 deactivate 方法
  • 當 State 被永久地從視圖樹中移除時,Flutter 會調用 dispose 方法,而一旦 dispose 方法被調用,組件就要被銷燬了,所以能夠在 dispose 方法中進行最終的資源釋放、移除監聽、清理環境等工做

file

file

相關文章
相關標籤/搜索