Flutter之 State 生命周期

State 的生命周期柜蜈,指的是在用戶(hù)參與的情況下,其關(guān)聯(lián)的 Widget 所經(jīng)歷的逆趣,從創(chuàng)建到顯示,再到更新最后到停止荣赶,直至銷(xiāo)毀等各個(gè)階段

不同的階段涉及到特定的任務(wù)處理

State 的生命周期流程如下圖所示

file

由圖可知:State 的生命周期可以分為三個(gè)階段:創(chuàng)建(插入視圖樹(shù))、更新(在視圖樹(shù)中存在)、銷(xiāo)毀(從視圖樹(shù)中移除)

創(chuàng)建

State 初始化時(shí)會(huì)依次執(zhí)行:構(gòu)造方法 -> initState -> didChangeDependencies -> build,隨后完成頁(yè)面渲染

  • 構(gòu)造方法:State 生命周期的起點(diǎn)桅狠,F(xiàn)lutter 會(huì)通過(guò)調(diào)用 StatefulWidget.createState() 來(lái)創(chuàng)建一個(gè) State〗窝恚可以通過(guò)構(gòu)造方法垂攘,來(lái)接收父 Widget 傳遞的初始化 UI 配置數(shù)據(jù),而這些配置數(shù)據(jù)淤刃,決定了 Widget 最初的呈現(xiàn)狀態(tài)
  • initState:在 State 對(duì)象被插入視圖樹(shù)時(shí)調(diào)用。在 State 的生命周期中只會(huì)被調(diào)用一次吱型,因此可以在 initState 函數(shù)中做一些初始化操作
  • didChangeDependencies:專(zhuān)門(mén)用來(lái)處理 State 對(duì)象依賴(lài)關(guān)系變化逸贾,會(huì)在 initState() 調(diào)用結(jié)束后調(diào)用
  • build:構(gòu)建視圖。經(jīng)過(guò)構(gòu)造方法津滞、initState铝侵、didChangeDependencies 后,F(xiàn)ramework 認(rèn)為 State 已經(jīng)準(zhǔn)備就緒触徐,于是便調(diào)用 build咪鲜。在 build 中,需要根據(jù)父 Widget 傳遞過(guò)來(lái)的初始化配置數(shù)據(jù)及 State 的當(dāng)前狀態(tài)撞鹉,創(chuàng)建一個(gè) Widget 然后返回
更新

Widget 的狀態(tài)更新疟丙,主要由 setState颖侄、didChangeDependencies 和 didUpdateWidget 觸發(fā)

  • setState:當(dāng)狀態(tài)數(shù)據(jù)發(fā)生變化時(shí),可以通過(guò)調(diào)用 setState 方法告訴 Flutter 使用更新后數(shù)據(jù)重建 UI
  • didChangeDependencies:State 對(duì)象的依賴(lài)關(guān)系發(fā)生變化后享郊,F(xiàn)lutter 會(huì)回調(diào)該方法览祖,隨后觸發(fā)組件構(gòu)建。State 對(duì)象依賴(lài)關(guān)系發(fā)生變化的典型場(chǎng)景:系統(tǒng)語(yǔ)言 Locale 或應(yīng)用主題改變時(shí)炊琉,系統(tǒng)會(huì)通知 State 執(zhí)行 didChangeDependencies 回調(diào)方法
  • didUpdateWidget:Widget 的配置發(fā)生變化時(shí)展蒂,或熱重載時(shí),系統(tǒng)會(huì)回調(diào)該方法

一旦這三個(gè)方法被調(diào)用苔咪,F(xiàn)lutter 隨后便會(huì)銷(xiāo)毀舊的 Widget锰悼,并調(diào)用 build 方法重建 Widget

銷(xiāo)毀

組件銷(xiāo)毀相對(duì)創(chuàng)建和更新而言更簡(jiǎn)單。比如頁(yè)面銷(xiāo)毀時(shí)或是組件被移除時(shí)团赏,系統(tǒng)會(huì)調(diào)用 deactivate 和 dispose 這兩個(gè)方法箕般,來(lái)移除或銷(xiāo)毀組件

  • 當(dāng)組件的可見(jiàn)狀態(tài)發(fā)生變化時(shí),deactivate 方法會(huì)被調(diào)用馆里,這時(shí) State 會(huì)被暫時(shí)從視圖樹(shù)中移除隘世。
    注意:頁(yè)面切換時(shí),由于 State 對(duì)象在視圖樹(shù)中的位置發(fā)生了變化鸠踪,需要先暫時(shí)移除后再重新添加丙者,重新觸發(fā)組件構(gòu)建,因此也會(huì)調(diào)用 deactivate 方法
  • 當(dāng) State 被永久地從視圖樹(shù)中移除時(shí)营密,F(xiàn)lutter 會(huì)調(diào)用 dispose 方法械媒,而一旦 dispose 方法被調(diào)用,組件就要被銷(xiāo)毀了评汰,因此可以在 dispose 方法中進(jìn)行最終的資源釋放纷捞、移除監(jiān)聽(tīng)、清理環(huán)境等工作
file
file
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末被去,一起剝皮案震驚了整個(gè)濱河市主儡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惨缆,老刑警劉巖糜值,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異坯墨,居然都是意外死亡寂汇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)捣染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)骄瓣,“玉大人,你說(shuō)我怎么就攤上這事耍攘¢爬福” “怎么了畔勤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)臼膏。 經(jīng)常有香客問(wèn)我硼被,道長(zhǎng),這世上最難降的妖魔是什么渗磅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任嚷硫,我火速辦了婚禮,結(jié)果婚禮上始鱼,老公的妹妹穿的比我還像新娘仔掸。我一直安慰自己,他們只是感情好医清,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布起暮。 她就那樣靜靜地躺著,像睡著了一般会烙。 火紅的嫁衣襯著肌膚如雪负懦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天柏腻,我揣著相機(jī)與錄音纸厉,去河邊找鬼。 笑死五嫂,一個(gè)胖子當(dāng)著我的面吹牛颗品,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沃缘,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼躯枢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了槐臀?” 一聲冷哼從身側(cè)響起锄蹂,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎水慨,沒(méi)想到半個(gè)月后败匹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讥巡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舔哪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欢顷。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捉蚤,靈堂內(nèi)的尸體忽然破棺而出抬驴,到底是詐尸還是另有隱情炼七,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布布持,位于F島的核電站豌拙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏题暖。R本人自食惡果不足惜按傅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胧卤。 院中可真熱鬧唯绍,春花似錦、人聲如沸枝誊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叶撒。三九已至绝骚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祠够,已是汗流浹背压汪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哪审,地道東北人蛾魄。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像湿滓,于是被迫代替她去往敵國(guó)和親滴须。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容