Flutter 利用路由监听页面的展示与否

这里写自定义目录标题

1、新建routeMonitor.dart文件:

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:

dart 复制代码
MaterialApp(
      navigatorObservers: [AppRouteObserver().routeObserver],
);

3.监听页面显隐的页面

dart 复制代码
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('跳转下一个页面而隐藏');
  }
  ...
}
相关推荐
kirk_wang11 分钟前
Flutter艺术探索-Flutter CI/CD配置:GitHub Actions自动化部署
flutter·移动开发·flutter教程·移动开发教程
JMchen12312 分钟前
跨平台相机方案深度对比:CameraX vs. Flutter Camera vs. React Native
java·经验分享·数码相机·flutter·react native·kotlin·dart
时光追逐者15 分钟前
一个基于 .NET + Vue 实现的通用权限管理平台(RBAC模式),前后端分离模式,开箱即用!
前端·vue.js·c#·.net·.net core
Aotman_17 分钟前
Vue el-table 表尾合计行
前端·javascript·vue.js·elementui·前端框架·ecmascript
一起养小猫18 分钟前
Flutter for OpenHarmony 进阶:Socket通信与网络编程深度解析
网络·flutter·harmonyos
Mr.空许23 分钟前
Flutter for OpenHarmony音乐播放器App实战10:歌单列表实现
flutter
静小谢24 分钟前
vue3实现语言切换vue-i18n
前端·javascript·vue.js
Highcharts.js25 分钟前
如何使用Highcharts Flutter的官方使用文档
javascript·flutter·开发文档·highcharts
东东51628 分钟前
资产管理信息系统ssm+vue
前端·javascript·vue.js
森爱。29 分钟前
web开发全家桶(django+前端+数据库)
前端·python·django