widget的生命周期
build构造函数调用 -> 调用build方法
statefulWidget的生命周期
class ESTest extends StatefulWidget {
ESTest(){
print("1.widget中调用构造方法");
}
@override
_ESTestState createState(){
print("2.widget中调用createState方法");
return _ESTestState();
}
}
class _ESTestState extends State<ESTest> {
_ESTestState(){
print("3.state中调用构造方法");
}
@override
void initState() {
// TODO: implement initState
print("4.state中调用init方法");
super.initState();
}
@override
void didChangeDependencies() {
print("state中调用didChangeDependencies");
// TODO: implement didChangeDependencies
super.didChangeDependencies();
}
@override
void didUpdateWidget(ESTest oldWidget) {
// TODO: implement didUpdateWidget
print("state中调用:didUpdateWidget");
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
print("5.state中调用build方法");
return Container();
}
@override
void dispose() {
// TODO: implement dispose
print("6.state中调用销毁dispose方法");
super.dispose();
}
}
打印声明周期调用顺序:
Restarted application in 456ms.
flutter: 1.widget中调用构造方法
flutter: 2.widget中调用createState方法
flutter: 3.state中调用构造方法
flutter: 4.state中调用init方法
flutter: state中调用didChangeDependencies
flutter: 5.state中调用build方法
flutter: 1.widget中调用构造方法
flutter: state中调用:didUpdateWidget
flutter: 5.state中调用build方法
注意:
- 如果调用setstate方法,会重新调用state的build方法(flutter: 5.state中调用build方法)
- 当父widget的state触发rebuild会调用didUpdateWidget
- mounted是state内部设置的一个属性,不需要手动进行修改(作用:用来记录widget对应的element是否为空,为空销毁,不为空挂载)
- dirty state是通过element的属性来标记,如果为true才会重新调用build方法,调用结束会设置为false
网友评论