如何导航到屏幕并删除所有屏幕/路线历史记录[注销功能]

问题描述 投票:0回答:3

如何导航到某个屏幕并删除所有以前的路由历史记录,以便用户无法按返回键并转到上一个屏幕?
就我而言,我想在用户注销时推送登录屏幕,但导航历史记录仍然存在,因此用户只需按后退即可返回到上一页。

What I have:
A -> B -> C       //Before signing out
A -> B -> C -> L  //After signing out

What I want:
A -> B -> C       //Before signing out
L                 //After signing out
flutter dart flutter-navigation flutter-routes
3个回答
5
投票

推送到新屏幕并删除所有以前的屏幕

Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LoginPage(),), (route) => false);

推送到新路线并删除所有以前的路线

Navigator.pushNamedAndRemoveUntil(context, login_page_route, (route) => false);

pushAndRemoveUntil
将删除所有现有路线并推送到新页面。


2
投票
Navigator.of(context).popUntil(ModalRoute.withName('L'));

0
投票

我使用 auto_route(您也可以使用其他一些路由方法)并借助我的 Flutter Web 应用程序中的 HTML 实现了这一点

onPressed: () async {
              await SessionService().logoutData();

              context.router.replaceAll(<PageRouteInfo>[const LoginView()]);

              Future<void>.delayed(const Duration(milliseconds: 100), () {
                SessionService().disableBackButton();
              });
            }

这是disableBackButton()代码

import 'dart:html';

void disableBackButton() {
    window.addEventListener('popstate', (dynamic event) {
      window.history.pushState(null, '', window.location.href);
    });
    window.history.pushState(null, '', window.location.href);
}
© www.soinside.com 2019 - 2024. All rights reserved.