2. Flutter 之 Widget(生命周期)

??Widget其實(shí)就是Flutter的組件、控件售躁,在Flutter中萬物皆Widget正塌;在我們iOS或者Android開發(fā)中,我們的界面有很多種類的劃分:應(yīng)用(Application)呛每、視圖控制器(View Controller)踩窖、活動(Activity)、View(視圖)晨横、Button(按鈕)等等洋腮;但是在Flutter中,這些東西都是不同的Widget而已手形;

??在Flutter開發(fā)中啥供,我們可以繼承StatelessWidget或者StatefulWidget來創(chuàng)建自己的Widget類;

StatelessWidget: 沒有狀態(tài)改變的Widget库糠,通常這種Widget僅僅是做一些展示工作而已伙狐;數(shù)據(jù)通常是直接寫死
StatefulWidget: 需要保存狀態(tài),并且可能出現(xiàn)狀態(tài)改變的Widget瞬欧;

1. StatelessWidget 寫法

1贷屎、讓自己創(chuàng)建的Widget繼承自StatelessWidget;
2艘虎、StatelessWidget包含一個必須重寫的方法:build方法唉侄;

class MyStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return <返回我們的Widget要渲染的Widget,比如一個Text Widget>;
  }
}

2. StatefulWidge 寫法

Flutter將StatefulWidget設(shè)計成了兩個類:
1野建、一個類繼承自StatefulWidget属划,作為Widget樹的一部分;
2贬墩、一個類繼承自State榴嗅,用于記錄StatefulWidget會變化的狀態(tài)妄呕,并且根據(jù)狀態(tài)的變化陶舞,構(gòu)建出新的Widget;

class MyStatefulWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // 將創(chuàng)建的State返回
    return MyState();
  }
}

class MyState extends State<MyStatefulWidget> {
  @override
  Widget build(BuildContext context) {
    return <構(gòu)建自己的Widget>;
  }
}
build方法的解析:

Flutter在拿到我們自己創(chuàng)建的StatelessWidget時绪励,就會執(zhí)行它的build方法肿孵;
我們需要在build方法中告訴Flutter唠粥,我們的Widget希望渲染什么元素,比如一個Text Widget停做;
StatelessWidget沒辦法主動去執(zhí)行build方法晤愧,當(dāng)我們使用的數(shù)據(jù)發(fā)生改變時,build方法會被重新執(zhí)行蛉腌;

build方法什么情況下被執(zhí)行呢官份?:

1、當(dāng)我們的StatelessWidget第一次被插入到Widget樹中時(也就是第一次被創(chuàng)建時)烙丛;
2舅巷、當(dāng)我們的父Widget(parent widget)發(fā)生改變時,子Widget會被重新構(gòu)建河咽;
3钠右、如果我們的Widget依賴InheritedWidget的一些數(shù)據(jù),InheritedWidget數(shù)據(jù)發(fā)生改變時忘蟹;

3. Widget生命周期

Flutter小部件的生命周期:
??StatelessWidget可以由父Widget直接傳入值飒房,調(diào)用build方法來構(gòu)建,整個過程非常簡單媚值;
??StatefulWidget需要通過State來管理其數(shù)據(jù)狠毯,并且還要監(jiān)控狀態(tài)的改變決定是否重新build整個Widget;
所以杂腰,我們主要討論StatefulWidget的生命周期垃你,也就是它從創(chuàng)建到銷毀的整個過程;

3.1 StatelessWidget生命周期

1喂很、執(zhí)行StatelessWidget的構(gòu)造函數(shù)(Constructor)來創(chuàng)建出StatelessWidget惜颇;
2、 執(zhí)行build方法

3.2 StatefulWidget生命周期

StatefulWidget本身由兩個類組成的:StatefulWidget和State少辣,我們分開進(jìn)行分析

  • 首先凌摄,執(zhí)行StatefulWidget中相關(guān)的方法:

1、執(zhí)行StatefulWidget的構(gòu)造函數(shù)(Constructor)來創(chuàng)建出StatefulWidget漓帅;
2锨亏、執(zhí)行StatefulWidget的createState方法,來創(chuàng)建一個維護(hù)StatefulWidget的State對象忙干;

  • 其次器予,調(diào)用createState創(chuàng)建State對象時,執(zhí)行State類的相關(guān)方法:

1捐迫、執(zhí)行State類的構(gòu)造方法(Constructor)來創(chuàng)建State對象乾翔;
2、執(zhí)行initState,我們通常會在這個方法中執(zhí)行一些數(shù)據(jù)初始化的操作反浓,或者也可能會發(fā)送網(wǎng)絡(luò)請求
3萌丈、執(zhí)行didChangeDependencies方法,這個方法在兩種情況下會調(diào)用
??情況一:調(diào)用initState會調(diào)用雷则;
??情況二:從其他對象中依賴一些數(shù)據(jù)發(fā)生改變時
4辆雾、Flutter執(zhí)行build方法,來看一下我們當(dāng)前的Widget需要渲染哪些Widget月劈;
5度迂、當(dāng)前的Widget不再使用時,會調(diào)用dispose進(jìn)行銷毀猜揪;

  • 另外

6英岭、手動調(diào)用setState方法,會根據(jù)最新的狀態(tài)(數(shù)據(jù))來重新調(diào)用build方法湿右,構(gòu)建對應(yīng)的Widgets诅妹;
7、執(zhí)行didUpdateWidget方法是在當(dāng)父Widget觸發(fā)重建(rebuild)時毅人,系統(tǒng)會調(diào)用didUpdateWidget方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吭狡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丈莺,更是在濱河造成了極大的恐慌划煮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缔俄,死亡現(xiàn)場離奇詭異弛秋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)俐载,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蟹略,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遏佣,你說我怎么就攤上這事挖炬。” “怎么了状婶?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵意敛,是天一觀的道長。 經(jīng)常有香客問我膛虫,道長草姻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任稍刀,我火速辦了婚禮撩独,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己跌榔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布捶障。 她就那樣靜靜地躺著僧须,像睡著了一般。 火紅的嫁衣襯著肌膚如雪项炼。 梳的紋絲不亂的頭發(fā)上担平,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音锭部,去河邊找鬼暂论。 笑死,一個胖子當(dāng)著我的面吹牛拌禾,可吹牛的內(nèi)容都是我干的取胎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼湃窍,長吁一口氣:“原來是場噩夢啊……” “哼闻蛀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起您市,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤觉痛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茵休,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薪棒,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年榕莺,在試婚紗的時候發(fā)現(xiàn)自己被綠了俐芯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钉鸯,死狀恐怖泼各,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亏拉,我是刑警寧澤扣蜻,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站及塘,受9級特大地震影響莽使,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笙僚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一芳肌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦亿笤、人聲如沸翎迁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汪榔。三九已至,卻和暖如春肃拜,著一層夾襖步出監(jiān)牢的瞬間痴腌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工燃领, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留士聪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓猛蔽,卻偏偏與公主長得像剥悟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子曼库,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354