文章目录
- 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的生命周期以及其它的系统事件,而不是单个页面的生命周期事件。
 看官们,与"如何监听组件的生命周期"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!




![基于51单片机的定时器时钟设计[proteus仿真]](https://img-blog.csdnimg.cn/direct/60d7f9d236c7413ab0e32ce0e2eddae8.png)



![[C/C++]string类常用接口介绍及模拟实现string类](https://img-blog.csdnimg.cn/direct/367e962274e24e46ba2abeee0f0bf148.png)



![[QT]自定义的QtabWidget](https://img-blog.csdnimg.cn/direct/52ed24c0306e4ea8a3846f376dfcb375.gif)






