当前位置:   article > 正文

第三百九十四回

第三百九十四回


我们在上一章回中介绍了"显示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');
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在示例代码中我们重写了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的生命周期以及其它的系统事件,而不是单个页面的生命周期事件。
    看官们,与"如何监听组件的生命周期"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/225193
推荐阅读
相关标签
  

闽ICP备14008679号