Flutter监听当前页面可见与隐藏状态的代码详解

2025-03-07 17:50

本文主要是介绍Flutter监听当前页面可见与隐藏状态的代码详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下...

  • flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.chinasem.cn前某个页面 当前正在显示 还是 隐藏了

  • 找一个公共文件初始化一下 路由观察者,例如:

    • public.Dart,只要能做成全局对象就行。

/// 路由观察者
final routeObserver = RouteObserver<PageRoute>();

有了 路由观察者 对象后,注册为导航监听者:

  • main.dart

/// MaterialApp
Widget buildMaterialApp(BuildContext context) {
  // 这里直接在 MaterialApp 对象进行全局注册,其他模式也有,例如 CupertinoApp、WidgetsAp、Navigator
  return GetMaterialApp(
      title: 'Flutter Demo',
      // 注册
      navigatorObservers: [routeObserver],
    );
    ...
    ...
    ...
  }
}

页面使用,推荐封装作为底层 BaseStateful 使用,其他页面继承,可以随时打开,也可以单个页面使用:

import 'package:flutter/material.dart';
import 'package:base_project/utils/public.dart';

@immutable
class BaseStatefulController extends StatefulWidget {

http://www.chinasem.cn  const BaseStatefulController({super.key});

  @override
  State<BaseStatefulController> createState() => BaseStatefulControllerState();
}

class BaseStatefulControllerState extends State<BaseStatefulController> with RouteAware {

  /// 启用路由观察者
  bool enableRouteObserver = false;

  @override
  void initState() {
    super.initState();
    // 等待加载
    WidgetsBinding.instance.addPostFrameCallback((_) {
      // 初始化上下文完成
      initStateContext();
    });
  }

  /// 初始化上下文完成,可以在这里做一些需要上下文的初始化操作
  void initStateContext () {
    // 注册路由监听
    if (enableRouteObserver) {
      final route = ModalRoute.of(context);
      if (route is PageRoute) {
        routeObserver.subscribe(this, route);
      }
    }
  }

  @override
  void dispose() {
    // 取消路由监听
    routeObserver.unsubscribe(this);
    super.dispose();
  }

  @override
  void didPush() {
    print("页面被 pusandroidh 到栈顶,页面可见");
  }
  @override
  void didPop() {
    print("页面被 pop,页面销毁");
  }
  @override
  void didPushNext() {
    print("有新页面 push 进来,当前页面进入不可见状态android");
  }
  @override
  void didPopNext() {
    print("上一个页面被 pop,当前页面重新可见");
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
方法作用
subscribe(routeAware, route)订阅某个页面,监听生命周期变化
unsubscribe(routeAware)取消订阅,避免内存泄漏
didPush()页面进入可见
didPop()页面销毁
didPushNext()当前页面被覆盖,不可见
didPopNext()上一个页面被 pop,当前页面重新可见

以上就是Flutter监听当前页面可见与隐藏状态的代码详解的详细内容,更多关于Flutter监听javascript当前页面的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于Flutter监听当前页面可见与隐藏状态的代码详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153675

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul