flutter组件只有两种:有状态和无状态组件。由于无状态组件效率高,如果不涉及到组件内部的数据存储,尽量多的使用无状态组件
1、StatelessWidget
build:组件渲染
调用次数:1次
2、StatefulWidget
StatefulWidget 的生命周期安时期不同可以分为三组 1.初始化 //createState , initState 2.更新 //didChanegDependencies , bulid, didUpdateWidget 3.销毁 //deactivate , dispose
创建一个statefulWidget会立即调用createState这个方法也是必须覆盖
@override
_CycleWidgetState createState() => _CycleWidgetState();
}
initState是除了构造函数外的第一个方法一些初始化的工作一般都在这个方法里生成
@override
_CycleWidgetState createState() => _CycleWidgetState();
}
class _CycleWidgetState extends State<CycleWidget> {
@override
void initState() {
// TODO: implement initState
print('-------------');
super.initState();
}
@override
Widget build(BuildContext context) {
return Container();
}
}
更新时期的方法是didChanegDependencies当initState调用后didChanegDependencies会立即调用一次当StatefulWidget所依赖的InheritedWidget中的变量发生改变时也会马上调用他
build方法也是必须调用的didChanegDependencies调用后会马上调用他,当使用setState方法的时候也会调用build方法,比如点击按钮按钮中有setState方法则build方法就会执行
@override
void initState() {
// TODO: implement initState
print('-------------');
super.initState();
}
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
print('build')
return Container(child: Column(children: <Widget>[RaisedButton(onPressed: (){
setState(() {
print('!!!!!!');
});
},)],),);
}
}
didUpdateWidget也是用来更新的一个方法,当父组件需要重新绘制的时候会调用它
销毁期间当组件被移除的时候会调用deactivate方法deactivate方法会在dispose前被调用
dispose是组件被销毁时调用,一般在dispose中做通知的移除和监听器的销毁工作
总结
StatefulWidget是Flutter中的一个有状态的组件,它的生命周期相对复杂一些。下面是StatefulWidget的生命周期方法及其调用顺序:
-
createState(): 当StatefulWidget被插入到Widget树中时,会调用createState()方法来创建与之关联的State对象。
-
initState(): 在createState()方法后立即调用,用于初始化State对象,可以在这个方法中进行一些初始化操作,如订阅事件、初始化变量等。
-
didChangeDependencies(): 在initState()之后调用,用于处理依赖关系的变化,比如获取父Widget传递的数据。
-
build(): 在didChangeDependencies()之后调用,用于构建Widget的UI。
-
didUpdateWidget(): 当父Widget发生变化时,会调用didUpdateWidget()方法,可以在这个方法中更新State对象的一些属性。
-
setState(): 当需要更新State对象时,可以调用setState()方法,它会触发build()方法重新构建UI。
-
deactivate(): 当StatefulWidget被移除出Widget树时,会调用deactivate()方法,可以在这个方法中做一些清理工作。
-
dispose(): 当StatefulWidget被永久移除出Widget树时,会调用dispose()方法,可以在这个方法中释放资源、取消订阅等。
总结起来,StatefulWidget的生命周期包括:创建、初始化、依赖关系变化、构建UI、更新、移除和销毁。这些方法的调用顺序是固定的,开发者可以在对应的方法中执行相应的操作以满足业务需求。
其次,生命周期的调用顺序是由父级到子级