Flutter中的AppLifecycleListener:应用生命周期监听器介绍及使用

引言

当你在Flutter中需要监听应用程序的生命周期变化时,可以使用AppLifecycleListener。在Flutter 3.13中,AppLifecycleListener被添加到Framework中,用于监听应用程序的生命周期变化,并响应退出应用程序的请求等支持。

在Flutter 3.13之前,我们通常使用WidgetsBindingObserverdidChangeAppLifecycleState方法来实现生命周期的监听。但是,didChangeAppLifecycleState方法比较“粗暴”,直接返回AppLifecycleState让用户自己处理。而AppLifecycleListener则是在WidgetsBindingObserver.didChangeAppLifecycleState的基础上进行了封装,再配合当前lifecycleState形成更完整的生命周期链条,对于开发者来说就是使用更方便,并且API相应更直观。

以下是一个简单的使用AppLifecycleListener的示例:

late final AppLifecycleListener _listener;
late AppLifecycleState? _state;
void initState() {super.initState();_state = SchedulerBinding.instance.lifecycleState;_listener = AppLifecycleListener(onShow: () => _handleTransition('show'),onResume: () => _handleTransition('resume'),onHide: () => _handleTransition('hide'),onInactive: () => _handleTransition('inactive'),onPause: () => _handleTransition('pause'),onDetach: () => _handleTransition('detach'),onRestart: () => _handleTransition('restart'),// 每次状态改变都会触发。上面的回调只用于特定的状态转换。onStateChange: _handleStateChange,);
}void _handleTransition(String name) {print("########################## main $name");
}

总结

  1. late AppLifecycleState? _state是一个实例变量,用于存储当前应用程序的生命周期状态。在上述示例中,_stateinitState()方法中被初始化为当前应用程序的生命周期状态,即SchedulerBinding.instance.lifecycleState。虽然在这个示例中没有使用_state,但是在其他的应用场景中,你可能需要使用它来记录应用程序的生命周期状态并在后续的处理中使用。
  2. AppLifecycleListener是一个完整的类,所以使用它无需使用mixin,你只需要在使用的地方创建一个AppLifecycleListener对象即可。AppLifecycleListener根据AppLifecycleState区分好了所有回调调用,调用编排更加直观。最后,AppLifecycleListener可以更方便地判断和记录整个生命周期的链条变化,因为它已经帮你封装好回调方法。

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

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

相关文章

CmakeList教程

一、CmakeList介绍: cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。它会通过写的语句自动生成一个MakeFile,从而实现高效编译 二、CmakeList的常用指令 1.指定…

【 CSS 】定位

不要因为小小的失败而放弃大大的梦想,每一次坚持都是通向成功的一步。- 马克吐温 1. 定位 1.1 为何使用定位 我们先来看一个效果,同时思考一下用标准流或浮动能否实现类似的效果? 场景1: 某个元素可以自由的在一个盒子内移动位置&#xff0c…

#Uniapp:uni.request(OBJECT)

uni.request(OBJECT) 发起网络请求。 示例 uni.request({url: https://www.example.com/request, //仅为示例,并非真实接口地址。data: {text: uni.request},header: {custom-header: hello //自定义请求头信息},success: (res) > {console.log(res.data);thi…

微服务基础概念、架构图、划分图

基础概念 1、微服务 微服务架构风格,就像是把一个单独的应用程序,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是http api。这些服务围绕业务能力来构建。并…

Java 日期处理

主要从以下三方面讲解: java.util 包提供了 Date 类来封装当前的日期和时间。java.util 包提供了 Calendar 类用来设置和获取日期数据的特定部分。java.text 包提供了 SimpleDateFormat 类来格式化日期的格式。 Date类 Date类的构造函数 Date 类主要提供了两个构…

小程序学习-21

目前小程序分包大小有以下限制: 整个小程序所有分包大小不超过 20M单个分包/主包大小不能超过 2M 独立分包:"independent": true

docker compose安装milvus

下载对应版本的milvus-standalone-docker-compose.yml wget https://github.com/milvus-io/milvus/releases/download/v2.3.5/milvus-standalone-docker-compose.yml重新命令为docker-compose.yml mv milvus-standalone-docker-compose.yml docker-compose.yml启动milvus doc…

记一次 stackoverflowerror 线上排查过程

一.线上 stackOverFlowError xxx日,突然收到线上日志关键字频繁告警 classCastException.从字面上的报警来看,仅仅是类型转换异常,查看细则发现其实是 stackOverFlowError.很多同学面试的时候总会被问到有没有遇到过线上stackOverFlowError?有么有遇到栈溢出?具体栈溢出怎么来…

postman测试导入文件

01 上传文件参数 1.选择请求方式 选择post请求方式,输入请求地址 2.填写Headers Key:Content-Type ; Value:multipart/form-data 如下图 3.填写body 选择form-data,key选择file类型后value会出现按钮&#xff0…

(十二)Head first design patterns代理模式(c++)

代理模式 代理模式:创建一个proxy对象,并为这个对象提供替身或者占位符以对这个对象进行控制。 典型例子:智能指针... 例子:比如说有一个talk接口,所有的people需要实现talk接口。但有些人有唱歌技能。不能在talk接…

表单的总数据为什么可以写成一个空对象,不用具体的写表单中绑定的值,vue3

<el-form :model"form" label-width"120px"><el-form-item label"Activity name"><el-input v-model"form.name" /></el-form-item> </el-form> const form ref({})from为空对象 在v-model里写form…

verde生成网格坐标

文章目录 网格坐标区域调整 Verde是Python用于地理空间数据处理的一个库&#xff0c;由于采用了一些机器学习的方法&#xff0c;所以除了科学计算三件套之外&#xff0c;还需要基于sklearn模块。考虑到依赖关系&#xff0c;这里比较推荐用conda安装。 conda install verde --c…

分布式websocket即时通信(IM)系统保证消息可靠性【第八期】

b站上面本期视频版本&#xff0c;观看视频食用更佳&#xff01;点击即可跳转,找不到视频可以直接搜索我 目前叫 呆呆呆呆梦 目前已经写的文章有。并且有对应视频版本。 git项目地址 【IM即时通信系统&#xff08;企聊聊&#xff09;】点击可跳转 sprinboot单体项目升级成sprin…

Windows 10中的驱动程序与device guard的兼容性

文章目录 Windows 10中的驱动程序与device guard的兼容性windows的device guard是什么如何构建兼容的驱动程序如何验证驱动程序的兼容性驱动程序验证程序兼容性检查启用基于虚拟化的隔离代码完整性HLK测试&#xff08;桌面和服务器&#xff09;Device Guard准备工具DGReadiness…

VsCode容器开发 - VsCode连接远程服务器上的docker

VsCode容器开发 - VsCode连接远程服务器上的docker 前言 之前在服务器上的Docker内开发&#xff0c;文件编辑起来就很不爽。不如使用VsCode直接打开远程服务器上的Docker&#xff0c;这样就能在VsCode里直接无缝编辑Docker里的文件了。 但是百度和必应得到的中文结果都很奇葩…

openssl3.2/test/certs - 013 - primary server-EKU root: sroot-cert

文章目录 openssl3.2/test/certs - 013 - primary server-EKU root: sroot-cert概述笔记END openssl3.2/test/certs - 013 - primary server-EKU root: sroot-cert 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 // \file my_openssl_linux_log_doc_013.txt // \not…

Java 实现二叉排序树(BST)

文章目录 介绍实现先定义一个节点树测试 总结 介绍 二叉排序树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是一种特殊的二叉树&#xff0c;其中每个节点的值都大于其左子树的任意节点值&#xff0c;而小于其右子树的任意节点值。 它具有以下特点&#xf…

笔记-孙子兵法-第三篇-谋攻(2)-集中优势兵力;将在外君命有所不受;知彼知己,百战不殆;

笔记-From 《华杉讲透孙子兵法》和《兵以诈立&#xff0c;我读孙子》 目录 第三篇-谋攻&#xff08;2&#xff09; 原文&#xff1a; Ankie的笔记-集中优势兵力&#xff1b;将在外君命有所不受&#xff1b;知彼知己&#xff0c;百战不殆&#xff1b; 第三篇-谋攻&#xff08…

有关HTML知识点汇总总结

一、VScode常用快捷键列表 代码格式化&#xff1a;ShiftAltF向上或向下移动一行&#xff1a;AltUp或AltDown快速复制一行代码&#xff1a;ShiftAltUp或ShiftAltDown快速保存&#xff1a;CtrlS快速查找&#xff1a;CtrlF快速替换&#xff1a;CtrlH 二、HTML系列总结 1、什么是H…

用flinkcdc debezium来捕获数据库的删除内容

我在用flinkcdc把数据从sqlserver写到doris 正常情况下sqlserver有删除数据&#xff0c;doris是能捕获到并很快同步删除的。 但是我现在情况是doris做为数仓&#xff0c;数据写到ods&#xff0c;ods的数据还会通过flink计算后写入dwd层&#xff0c;所以此时ods的数据是删除了…