flutter监听app进入前后台状态的实现

在开发app的过程中,我们经常需要根据app的前后台的状态,做一些事情,那么我们在flutter中是如何实现这一监听的?

flutter给我们提供了WidgetsBindingObserver来进行一些状态的判断,但是判断前后台的状态只是该API种其中一种功能,对于WidgetsBindingObserver需要注意两点

  • 最好是先进入而且不会销毁的页面, 这可以判断整个程序的前后台状态(例如:main。dart类中)
  • WidgetsBindingObserver需要被写在MateialApp或其它主题包裹的地方
  • 1. 监听app进入前后台状态 示例
    //1.第一步需要混入 WidgetsBindingObserver类, 里面的一些方法提供了程序状态的一些监听,我们可以重写方法来实现我们的逻辑
    class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(widget.title),),body: Container(color: Colors.orange,));}//实现监听flutter中App的一些状态, 比如 进入前后台@overridevoid initState() {super.initState();//2.页面初始化的时候,添加一个状态的监听者WidgetsBinding.instance?.addObserver(this);}@overridevoid dispose() {super.dispose();//3. 页面销毁时,移出监听者WidgetsBinding.instance?.removeObserver(this);}//一些状态改变监听方法//监听程序进入前后台的状态改变的方法@overridevoid didChangeAppLifecycleState(AppLifecycleState state) {// TODO: implement didChangeAppLifecycleStatesuper.didChangeAppLifecycleState(state);switch (state) {//进入应用时候不会触发该状态 应用程序处于可见状态,并且可以响应用户的输入事件。它相当于 Android 中Activity的onResumecase AppLifecycleState.resumed:print("应用进入前台======");break;//应用状态处于闲置状态,并且没有用户的输入事件,// 注意:这个状态切换到 前后台 会触发,所以流程应该是先冻结窗口,然后停止UIcase AppLifecycleState.inactive:print("应用处于闲置状态,这种状态的应用应该假设他们可能在任何时候暂停 切换到后台会触发======");break;//当前页面即将退出case AppLifecycleState.detached:print("当前页面即将退出======");break;// 应用程序处于不可见状态case AppLifecycleState.paused:print("应用处于不可见状态 后台======");break;}} 
    }
    
  • 2.其它状态监听
  • //当前系统改变了一些访问性活动的回调@overridevoid didChangeAccessibilityFeatures() {super.didChangeAccessibilityFeatures();}//低内存回调@overridevoid didHaveMemoryPressure() {super.didHaveMemoryPressure();}//用户本地设置变化时调用,如系统语言改变@overridevoid didChangeLocales(List<Locale>? locales) {super.didChangeLocales(locales);}//应用尺寸改变回调,例如旋转@overridevoid didChangeMetrics() {super.didChangeMetrics();}@overrideFuture<bool> didPopRoute() {//return super.didPopRoute();print('YM--------didPopRoute');//页面弹出return Future.value(false);//true为拦截,false不拦截}@overrideFuture<bool> didPushRoute(String route) {//return super.didPushRoute(route);print('YM--------PushRoute');  //拦截pushreturn Future.value(false);}//平台主题改变时回调@overridevoid didChangePlatformBrightness() {super.didChangePlatformBrightness();}
    

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

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

相关文章

SpringCloud-Ribbon:负载均衡(基于客户端)

6. Ribbon&#xff1a;负载均衡(基于客户端) 6.1 负载均衡以及Ribbon Ribbon是什么&#xff1f; Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。简单的说&#xff0c;Ribbon 是 Netflix 发布的开源项目&#xff0c;主要功能是提供客户端的软件负…

阿里云资源包管理

-我守在梦的出口&#xff0c;任凭人来人走 阿里云对象存储中的下行流量包是什么&#xff1f; 阿里云对象存储&#xff08;OSS&#xff09;中的下行流量包是一种预付费的流量套餐&#xff0c;用于支付从阿里云 OSS 存储桶下载数据产生的流量费用。当你的应用程序或用户从 OSS 存…

飞马座卫星

1960年代马歇尔太空飞行中心的历史显然与建造土星五号月球火箭有关。然而&#xff0c;鲜为人知的是该中心在设计科学有效载荷方面的早期工作。 Fairchild 技术人员正在检查扩展的 Pegasus 流星体探测表面。Pegasus 由马里兰州黑格斯敦的 Fairchild Stratos Corporation 通过马歇…

Django(十)

1. Ajax请求 浏览器向网站发送请求时&#xff1a;URL 和 表单的形式提交。 GETPOST 特点&#xff1a;页面刷新。 除此之外&#xff0c;也可以基于Ajax向后台发送请求&#xff08;偷偷的发送请求&#xff09;。 依赖jQuery编写ajax代码 $.ajax({url:"发送的地址"…

[WUSTCTF2020]朴实无华(特详解)

一开始说header出问题了 就先dirsaerch扫一遍 发现robot.txt 访问一下 去看看&#xff0c;好好好&#xff0c;肯定不是得 他一开始说header有问题&#xff0c;不妨抓包看看&#xff0c;果然有东西 访问看看&#xff0c;乱码修复一下&#xff0c;在之前的博客到过 <img src…

波奇学Linux: 文件描述符

文件和操作系统的关系 操作系统控制进程&#xff0c;文件的打开是在进程中进行。意味着用来控制进程的PCB必然有文件的信息&#xff0c;操作系统通过控制PCB的信息来控制文件的读写。 Q1&#xff1a;如何证明文件打开是在进程中进行&#xff1f; 编写c文件调用fopen来操作文件…

2024腾讯云游戏服务器租用多少钱一年?

2024年更新腾讯云游戏联机服务器配置价格表&#xff0c;可用于搭建幻兽帕鲁、雾锁王国等游戏服务器&#xff0c;游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置&#xff0c;可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

PlateUML绘制UML图教程

UML&#xff08;Unified Modeling Language&#xff09;是一种通用的建模语言&#xff0c;广泛用于软件开发中对系统进行可视化建模。PlantUML是一款强大的工具&#xff0c;通过简单的文本描述&#xff0c;能够生成UML图&#xff0c;包括类图、时序图、用例图等。PlantUML是一款…

Leetcode刷题笔记题解(C++):面试题 08.07. 无重复字符串的排列组合

思路&#xff1a;因为字符之间互不相同&#xff0c;故使用全排列的方式去解题&#xff1b; 字符串长度为n&#xff0c;将第一个字母分别与后面每一个字母进行交换&#xff0c;生成n种不同的全排列&#xff1b;再用第二个元素与后面每一个元素进行交换&#xff0c;生成n - 1种不…

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层&#xff1f;1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识&#xff1a;概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题&#xff08;复杂&#xff09; 大问题划分为小问题 怎么分层&#…

114.乐理基础-五线谱-快速识别五线谱的谱号

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;113.乐理基础-五线谱-五线谱的调号&#xff08;二&#xff09;-CSDN博客 15个调号&#xff0c;如下图&#xff0c;该怎样才能随便拿出一个来就能快速的知道这是什么调号呢&#xff1f; 一共分为三个要点&#xff1…

Web项目利用EasyExcel实现Excel的导出操作

早期Java使用的一些解析&#xff0c;到处excel的框架存在种种问题被遗弃&#xff0c;现在使用阿里巴巴所提供的EasyExcel已成为一种主流&#xff0c;本篇将详细介绍该功能在Web项目中如何实际应用。 详细操作文档&#xff1a;写Excel | Easy Excel 一、项目演示 在后台管理界…