Flutter 利用路由监听页面的展示与否
1、新建routeObser.dart文件:
import 'package:flutter/material.dart'; class AppRouteObserver { //这是实际上的路由监听器 static final RouteObserver<ModalRoute<void>> _routeObserver = RouteObserver<ModalRoute<void>>(); //这是个单例 static final AppRouteObserver _appRouteObserver = AppRouteObserver._internal(); AppRouteObserver._internal(); //通过单例的get方法轻松获取路由监听器 RouteObserver<ModalRoute<void>> get routeObserver { return _routeObserver; } factory AppRouteObserver() { return _appRouteObserver; } }
2、修改main.dart如下:
...
MaterialApp(
...,
navigatorObservers: [AppRouteObserver().routeObserver],
);
...
3、监听页面显隐的页面
class _XXX extends State<XXX> with RouteAware { ... @override void didChangeDependencies() { // TODO: implement didChangeDependencies super.didChangeDependencies(); /// 路由订阅 AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!); } @override void dispose() { // TODO: implement dispose /// 取消路由订阅 AppRouteObserver().routeObserver.unsubscribe(this); super.dispose(); } @override void didPush() { print('跳转该页面而显示'); } @override void didPop() { print('当前页面被pop而隐藏'); } @override void didPopNext() { print('上一个页面关闭而显示'); } @override void didPushNext() { print('跳转下一个页面而隐藏'); } ... }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效