文章目录
- 1. 概念介绍
- 2. 生命周期及其方法
- 2.1 生命周期
- 2.2 回调方法
- 2.3 使用方法
- 3. 示例代码
- 4. 内容总结
我们在上一章回中介绍了"显示Snackbar的另外一种方法"相关的内容,本章回中将介绍如何监听组件的生命周期.闲话休提,让我们一起Talk Flutter吧。
1. 概念介绍
我们在第八十二回中介绍过Widget的生命周期,主要介绍了生命周期的概念以及生命周期的回调方法,不这我们介绍的生命周期回调方法都是组件自带的方法,我们在本
章回中将介绍其它的生命周期方法,这些生命周期方法不是组件自带的,它们具体是什么呢?让我们一起去看看吧。
2. 生命周期及其方法
2.1 生命周期
我们在本章回介绍的生命周期和之前博客中介绍的类似,不过生命周期的状态稍微有点不同,这些状态主要来自widgestOvserver这个抽象类,它提供了相关的状态来
表示组件的生命周期,详细如下:
- AppLifecycleState.resumed: 当组件重新运行时可以监听到此状态;
- AppLifecycleState.inactive: 当组件可见时可以监听到此状态;
- AppLifecycleState.paused: 当组件不可见时可以监听到此状态;
- AppLifecycleState.detached: 当组件销毁时可以监听到此状态;
2.2 回调方法
介绍完组件的生命周期后,我们接着介绍与生命周期相对应的生命周期方法,这些方法也是来自widgestOvserver这个抽象类:
- didPopRoute()
- didPushRoute()
- didChangeMetrics()
- didChangePlatformBrightness()
- didChangeLocales()
- didChangeAppLifecycleState()
- didHaveMemoryPressure()
这些回调方法主要用来监听不同的功能,这个从方法的名称中就可以看出来,如果我们只想监听组件的生命周期,那么只需要重写didChangeAppLifecycleState()
方法就可以,该方法包含一个AppLifecycleState类型的参数,从参数中可以获取组件在生命周期中的状态,也就是我们在上一小节中介绍的状态。
2.3 使用方法
接下来我们介绍如何监听组件的生命周期,下面是详细的实现步骤:
- 把需要被监听的组件类组合(minxin)widgestOvserver抽象类;
- 在被监听组件的initState()方法中注册监听器,在disPose()方法中销毁监听器;
- 在组件类中重写组合类中的方法,在重写方法时可以监听各种系统事件;
我们在这里只通过文本来是介绍,在接下来的小节中将通过具体的示例代码来演示。此外,上面步骤中提到的被监听的组件只能是MaterialApp的子组件,其它组件无法
监听到生命周期的状态,或者说不会回调生命周期方法。这点需要特别注意一下。
3. 示例代码
///WidgetsBindingObserver只有放到MaterialApp的子组件下可以监听到消息,放在其它widget中无法监听到消息
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver{
///注意:需要在initState中注册监听器并且在disPose中销毁监听器
void didChangeAppLifecycleState(AppLifecycleState state) {
debugPrint(" app state: $state");
super.didChangeAppLifecycleState(state);
}
Widget build(BuildContext context) {}
void initState() {
super.initState();
debugPrint('HomePage initState');
WidgetsBinding.instance.addObserver(this);
}
void dispose() {
super.dispose();
WidgetsBinding.instance.removeObserver(this);
debugPrint('HomePage dispose');
}
}
在示例代码中我们重写了didChangeAppLifecycleState()这个回调方法,build方法中的内容省略不写,此外,_MyHomePageState这个类是MaterialApp组件
的子组件,只是我们在代码中省略了MaterialApp组件。编译并且运行上面的程序,同时把整个App切换到后台,可以得到下面运行结果:
I/flutter (13892): app state: AppLifecycleState.inactive
I/flutter (13892): app state: AppLifecycleState.paused
I/flutter (13892): app state: AppLifecycleState.detached
从上面的运行结果中可以看到组件生命周期的状态,不过启动时的日志(onResume)看不到,只有结束时的日志才能被看到。
4. 内容总结
最后, 我们对章回的内容做一个全面的总结:
- 我们可以组合widgestOvserver类,进而监听组件的生命周期;
- 在widgestOvserver中包含了多个回调方法,除了可以监听组件的生命周期外还可以监听其它的系统事件;
- 我们介绍的widgestOvserver类主要用来监听整个App可以响应的事件,而不是单个页面响应的事件;
最后,我们再次强调一下:widgestOvserver必须用在MaterialApp的home属性对应的Widget上,也就是MaterialApp的子组件。该类放在其它Widget上不起作
用。因此我们主要通过该类来监听整个App的生命周期以及其它的系统事件,而不是单个页面的生命周期事件。
看官们,与"如何监听组件的生命周期"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!