??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方法