/**
- 初始化:
State初始化时会依次执行 : 构造函数 > initState > didChangeDependencies > build , 此时页面加载完成。
改变状态:
调用setState后,会调用build()方法;而Hot-reload时候会调用didUpdateWidget()和build()
组件移除:
组件移除,例如页面销毁的时候会依次执行:deactivate > dispose
*/
class StateLifeCycleState extends State<StateLifeCycle> {
/**
* 最先被执行
*/
StateLifeCycleState() {
print("!!!!!!!!!!!!!!!!!!!!!! 初始化");
print("!!!!!!!!!!! 构造函数");
}
/**
* 当组件插入渲染树的时候调用此方法,在生命周期中只会调用一次,可以做一些初始化工作
*/
@override
void initState() {
super.initState();
print("!!!!!!!!!!! initState()");
}
/**
*state依赖的对象发生变化时调用
*/
@override
void didChangeDependencies() {
super.didChangeDependencies();
print("!!!!!!!!!!! didChangeDependencies()");
}
/**
* 当 widget 的配置发生变化时,会调用这个函数,比如调用了setState或者Hot-reload 的时候就会调用这个函数
* 这个函数调用后,会调用 build()。
*/
@override
void didUpdateWidget(StateLifeCycle oldWidget) {
super.didUpdateWidget(oldWidget);
print("!!!!!!!!!!! didUpdateWidget()");
}
/**
* 构建Widget时调用
*/
var str = "Flutter";
@override
Widget build(BuildContext context) {
print("!!!!!!!!!!! build()");
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("组件State生命周期"),),
body: Column(
children: <Widget>[
Text(str),
RaisedButton(
child: Text("改变状态"),
onPressed: () {
print("!!!!!!!!!!!!!!!!!!!!!! 改变状态");
setState(() {
str = "Hello Flutter";
});
},
),
RaisedButton(
child: Text("杀掉页面"),
onPressed: () {
print("!!!!!!!!!!!!!!!!!!!!!! 组件移除");
Navigator.pop(context);
},
),
],
),
),
);
}
/**
* 当 State 被暂时从视图树中移除时,会调用这个函数。
页面切换时,也会调用它,因为此时 State 在视图树中的位置发生了变化,需要先暂时移除后添加。
重写的时候必须要调用 super.deactivate()。
*/
@override
void deactivate() {
super.deactivate();
print("!!!!!!!!!!! deactivate()");
}
/**
* 当 State 被永久的从视图树中移除,Framework 会调用该函数。
* 在调用这个函数之前,总会先调用 deactivate()。
重写的时候必须要调用 super.dispose()。
*/
@override
void dispose() {
super.dispose();
print("!!!!!!!!!!! dispose()");
}
}
05-20 17:07:41.321 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!!!!!!!!!!!! 初始化
05-20 17:07:41.322 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!! 构造函数
05-20 17:07:41.322 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!! initState()
05-20 17:07:41.322 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!! didChangeDependencies()
05-20 17:07:41.326 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!! build()
05-20 17:07:51.684 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!!!!!!!!!!!! 改变状态
05-20 17:07:51.694 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!! build()
05-20 17:07:59.520 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!!!!!!!!!!!!! 组件移除
05-20 17:07:59.852 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!! deactivate()
05-20 17:07:59.868 19505-19621/com.yourcompany.test1 I/flutter: !!!!!!!!!!! dispose()
网友评论