GetX 踩坑之移除路由栈中的某个页面

踩坑

在业务需求中需要在特定页面移除之前的某个页面,比如有这样一个路由栈。A->B->C->D->E。此时想在E界面移除页面C。在网上搜索了一下相关实现,并没有太多好的办法,有的话也入寝比较高。于是按照自己的理解实现了一个解决办法。

第一步
首先我们自定义一个RouteObserver 来监听路由变化并在内部实现删除置顶页面功能。

import 'package:flutter/material.dart';
import 'package:get/get.dart';

// app路由监听
class AppRoutesObserver extends RouteObserver {
  final List<Route> _appRoutes = [];

  @override
  void didPush(Route route, Route? previousRoute) {
    super.didPush(route, previousRoute);
    _appRoutes.insert(0, route);
  }

  @override
  void didPop(Route route, Route? previousRoute) {
    super.didPop(route, previousRoute);
    _appRoutes.remove(route);
  }

  // 移除指定路由页面
  Future removeRoute<S extends GetxController>(String routeName) async {
    // 如果弹出的不是广告占位页面则移除
    for (Route route in _appRoutes) {
      if (route.settings.name == null) {
        continue;
      }
      Uri? url = Uri.tryParse(route.settings.name!);
      if (url != null && url.path == routeName) {
        _appRoutes.remove(route);
        // 从路由栈中移除
        Get.removeRoute(route);
        // 移除controller
        await Get.delete<S>(force: true);
        break;
      }
    }
  }
}

应该也可以通过Get来获取路由栈信息。

第二部
main.dart中的GetMaterialApp 中的navigatorObservers 加入AppRoutesObserver 注意把AppRoutesObserver定义成全局的,这样在需要删除中间页面时直接使用该类的removeRoute即可,注意在调用方式传入controller范型参数来删除对于的controller。

相关推荐

  1. GetX 某个页面

    2024-07-13 07:14:03       25 阅读
  2. FlutterGetX用法(管理)

    2024-07-13 07:14:03       34 阅读
  3. ListNode 2487. 从链表节点,单调应用

    2024-07-13 07:14:03       63 阅读
  4. Flutter GetX 管理

    2024-07-13 07:14:03       76 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 07:14:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 07:14:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 07:14:03       57 阅读
  4. Python语言-面向对象

    2024-07-13 07:14:03       68 阅读

热门阅读

  1. (C++01 栈与队列) 栈与队列的实现,栈的应用

    2024-07-13 07:14:03       17 阅读
  2. openresty+lua遍历 redis set

    2024-07-13 07:14:03       29 阅读
  3. Xcode持续集成之道:自动化构建与部署的精粹

    2024-07-13 07:14:03       26 阅读
  4. 把Docker的虚拟磁盘文件移动到别的盘符

    2024-07-13 07:14:03       23 阅读
  5. Linux C++ 060-设计模式之中介者模式

    2024-07-13 07:14:03       25 阅读
  6. MyBatis-Plus 关联查询

    2024-07-13 07:14:03       29 阅读
  7. 离线安装docker-compse

    2024-07-13 07:14:03       25 阅读
  8. license系统模型设计使用django models

    2024-07-13 07:14:03       28 阅读
  9. vue3 学习笔记06 -- pinia的简单使用

    2024-07-13 07:14:03       28 阅读
  10. C# Winform 自定义事件实战

    2024-07-13 07:14:03       22 阅读
  11. Linux RTL8111/8168/8411 不能联网

    2024-07-13 07:14:03       24 阅读
  12. 图论基础概念(详细讲解)

    2024-07-13 07:14:03       23 阅读
  13. ARFoundation系列讲解 - 94 Immersal 简介

    2024-07-13 07:14:03       23 阅读