第三百九十四回

news2024/11/18 4:46:53

文章目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1506167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux安装MeterSphere并结合内网穿透实现公网远程访问本地服务

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

机器人大赛有什么用?

机器人大赛在多个方面都具有显著的价值。首先&#xff0c;机器人大赛可以为学生提供一个实践与创新的机会&#xff0c;有助于培养学生的动手实践能力和创新思维。在比赛过程中&#xff0c;学生需要运用所学的知识和技能&#xff0c;设计、制作和调试机器人&#xff0c;这不仅可…

注意!!墙裂推荐几个好用的实用小工具!一定会用到的!

前言 在开发的世界里&#xff0c;面对各种挑战和问题时&#xff0c;拥有一套合适的工具箱至关重要。这不仅能提升我们的工作效率&#xff0c;还能让复杂的任务变得简单&#xff0c;甚至在解决棘手问题的同时&#xff0c;还能让我们的心情略微舒畅。众所周知&#xff0c;有用的…

备战蓝桥杯Day25 - 二叉搜索树

一、基本概念 二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;又称为二叉查找树或二叉排序树&#xff0c;是一种具有特定性质的二叉树。 定义&#xff1a;二叉搜索树可以是一棵空树&#xff0c;也可以是具有以下特性的非空二叉树&#xff1a; 若其左子树不…

基于51单片机的定时器时钟设计[proteus仿真]

基于51单片机的定时器时钟设计[proteus仿真] 时钟设计检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的定时器时钟设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&…

【MySql学习之路】window环境下MySql安装和安装过程中出现的问题

environment:windows software:mysql 本文主要分享mysql关系型数据库在干净的环境下,第一次安装以及在安装过程中出现的常见问题和解决方法。目前官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的。很多人下了zip格式的解压发现没有setup.exe,面对一堆文件无从…

【面试题】-02

素数之积 题目描述 RSA加密算法在网络安全世界中无处不在&#xff0c;它利用了极大整数因数分解的困难度&#xff0c;数据越大&#xff0c;安全系数越高&#xff0c;给定一个32位正整数&#xff0c;请对其进行因数分解&#xff0c;找出是哪两个素数的乘积。 输入描述 一个正整…

ORACLE Linux(OEL) - Primavera P6EPPM 安装及分享

引言 继上一期发布的CentOS版环境发布之后&#xff0c;近日我制作了基于ORACLE Linux的P6虚拟机环境&#xff0c;同样里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机&#xff0c;请先与Oracle Primavera销售代表取得联系…

[C/C++]string类常用接口介绍及模拟实现string类

一&#xff1a;Cstring类的由来 在C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需要用…

动态规划|【路径问题】|174.地下城游戏

题目 174. 地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健…

数字化转型导师坚鹏:科技金融政策、案例及营销创新

科技金融政策、案例及营销创新 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好的政策&#xff1f; 不知道科技金融有哪些成功的案例&#xff1f; 不知道科技金融如何进行营销创新&#xff1f; 课程特色&#xff1a; 以案例的方式解…

复制表

目录 复制表 将部门 30 的所有员工信息保存在 emp30 表中 将复杂查询结果创建为表 只将 emp 表的结构复制为 empnull 表 从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 复制表 严格来说&#xff0c;复制表不是复制操作&am…

[QT]自定义的QtabWidget

需求 最近有一个需求就是一个QTabWidget要求有四个tab页在左侧用于显示主页面&#xff0c;在右侧有一个关于按钮&#xff0c;点击后用于弹出窗口显示一些程序相关信息。主要是怎么实现右侧按钮 相关代码 #ifndef MYTABWIDGET_H #define MYTABWIDGET_H#include <QWidget&g…

UDP通信发送和接收 || UDP实现全双工通信

recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 功能: 从套接字中接收数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 …

康奈尔开源近10万份审稿意见,未来论文发表或将由AI定夺

大语言模型&#xff08;LLMs&#xff09;的进步为自动化论文评审开辟了新途径&#xff0c;这些模型在学术反馈领域展现出巨大潜力。自动化评审的核心优势在于其能够精准指出论文草稿的不足之处&#xff0c;助力作者优化研究。尽管已有丰富的同行评审数据&#xff0c;但现有自动…

利用websocket +定时器简易的实现一个网络聊天室

其实原理非常简单,就是客户端用户通过websoket来连接websocket服务端。然后服务端,收集每个用户发出的消息, 进而将每条用户的消息通过广播的形式推送到每个连接到服务端的客户端。从而实现用户的实时聊天。 // TODO : 我主要是讲一下实现思路。并未完善其功能。 1.后端 依赖 …

云原生(一)、linux快速上手

Linux是一种开源的Unix-like操作系统内核。它是由Linus Torvalds于1991年首次发布&#xff0c;其后经过全球的自由软件社区的持续开发和改进。Linux内核是操作系统的核心部分&#xff0c;但通常与GNU项目合作&#xff0c;以形成完整的操作系统&#xff0c;被称为Linux发行版&am…

每日OJ题_牛客WY28 跳石板(动态规划)

目录 牛客WY28 跳石板 解析代码 牛客WY28 跳石板 跳石板_牛客题霸_牛客网 解析代码 #include <iostream> #include <vector> #include <climits> #include <cmath> using namespace std;void get_div_num(int n, vector<int>& arr) {for…

基于java+springboot+vue实现的农产品智慧物流系统(文末源码+Lw)23-239

课题意义 现如今&#xff0c;信息种类变得越来越多&#xff0c;信息的容量也变得越来越大&#xff0c;这就是信息时代的标志。近些年&#xff0c;计算机科学发展得也越来越快&#xff0c;而且软件开发技术也越来越成熟&#xff0c;因此&#xff0c;在生活中的各个领域&#x…

WEBUI中的完美像素模式(Pixel Perfect)到底是什么意思

在webui的controlnet中&#xff0c;有个选项&#xff0c;叫做“完美像素模式”&#xff0c;英文为“pixel perfect mode”&#xff0c;有很多朋友在使用的时候不知道这个神奇的选项是否应该勾选上&#xff0c;所以有时候排查问题的时候&#xff0c;会反复的选择和去掉勾选&…