无状态组件
默认执行构造函数,构建组件执行build函数,除此之外,没有其他生命周期函数
有状态组件
- 有状态组件本身除了构造函数和createState之外,没有其他生命周期函数
0.1 有状态组件的生命周期都体现在他的状态类中,以下是有状态组件状态类的生命周期
未注册WidgetsBindingObserver观察者时的生命周期
初次打开
- 构造方法
- initState方法
手机手动转到其他应用
未触发任何生命周期函数
手机手动恢复到前台运行
未触发任何生命周期函数
手机通过手势后退
- deactivate方法
- dispose方法
再次打开
- 构造方法
- initState方法
通过setState更新界面
未触发任何生命周期函数
开发模式热 r 更新
未触发任何方法
开发模式热 R 更新
未触发任何方法
注册成WidgetsBindingObserver观察者后,的生命周期
注册成WidgetsBindingObserver观察者方式
四步:
- 状态类 组合 WidgetsBindingObserver
- 在
initState方法中,将自身注册为观察者WidgetsBinding.instance.addObserver(this) - 覆写
void didChangeAppLifecycleState(AppLifecycleState state)方法实现app的生命周期监听 - 覆写
void dispose()方法,移除监听
class _DemoWidgetState extends State<BarcodeCamera>
with WidgetsBindingObserver {
@override
void initState() {
// 将本身添加为观察者
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
}
初次打开
- 构造方法
- initState方法
手机手动转到其他应用
void didChangeAppLifecycleState(AppLifecycleState state)
AppLifecycleState.inactive
AppLifecycleState.hidden
AppLifecycleState.paused
可能会多次触发didChangeAppLifecycleState方法,但最后一次的state一定是AppLifecycleState.resumed
手机手动恢复到前台运行
void didChangeAppLifecycleState(AppLifecycleState state)
AppLifecycleState.hidden
AppLifecycleState.inactive
AppLifecycleState.resumed
可能会多次触发didChangeAppLifecycleState方法,但最后一次的state一定是AppLifecycleState.resumed
手机通过手势后退
- deactivate方法
- dispose方法
再次打开
- 构造方法
- initState方法
通过setState更新界面
未触发任何生命周期函数
开发模式热 r 更新
未触发任何方法
开发模式热 R 更新
未触发任何方法
enum AppLifecycleState {
// App 可能还存有 Flutter Engine ,但是视图并不存在
detached,
// 表示 App 处于具有输入焦点且可见的正在运行的状态。
resumed,
// App 至少一个视图是可见的,但没有一个视图具 Focus
inactive,
// App 的所有视图都被隐藏。
hidden,
// App 当前对用户不可见,并且不响应用户行为。
paused
}