Widget 生命周期
Flutter 的生命周期主要体现在 Widget 上,具体可分为两类:StatelessWidget 和 StatefulWidget。
1. StatelessWidget的生命周期
StatelessWidget 相对简单,主要包含构造方法和 build 方法:
class MyStatelessWidget extends StatelessWidget {final String title;MyStatelessWidget({this.title}) {print('构造函数被调用了!');}@overrideWidget build(BuildContext context) {print('build方法被调用了!');return Container();}
}
2. StatefulWidget的生命周期
StatefulWidget 的生命周期较为复杂,包含 Widget 和 State 两部分,可分为三个阶段:
初始化阶段(插入渲染树) |
|
状态改变阶段(在渲染树中存在) |
|
销毁阶段(从渲染树中移除) |
|
(1)初始化阶段
createState()
-
StatefulWidget 创建 State 的方法,只会执行一次
initState()
-
StatefulWidget 创建完成后调用的第一个方法,只会执行一次
class HomePage extends StatefulWidget {HomePage() {print('Widget的构造方法');}@override_HomePageState createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {_HomePageState() {print('State的构造方法');}@overridevoid initState() {print('State的init来了!');super.initState();}@overrideWidget build(BuildContext context) {return Container();}
}
(2)状态改变阶段
didChangeDependencies
- 首次创建时在 initState 之后立即调用
- 依赖的 InheritedWidget 发生变化时会再次调用
didChangeDependencies更多细节参考:didChangeDependencies与InheritedWidget的关系
@override
void didChangeDependencies() {print('didChangeDependencies');super.didChangeDependencies();
}
build 方法
-
首次创建时在 didChangeDependencies 之后立即调用
-
每当 UI 需要重新渲染时都会被调用
didUpdateWidget
-
父 widget 调用 setState 时,子 widget 的 didUpdateWidget 一定会被调用
@override
void didUpdateWidget(covariant StfulItem oldWidget) {print('子widget要didUpdateWidget');super.didUpdateWidget(oldWidget);
}
(3)销毁阶段
deactivate()
-
State 对象从渲染树中移出时调用
dispose()
-
Widget 销毁时调用
@override
void deactivate() {super.deactivate();
}@override
void dispose() {print('State的dispose');super.dispose();
}