如何导航到某个屏幕并删除所有以前的路由历史记录,以便用户无法按返回键并转到上一个屏幕?
就我而言,我想在用户注销时推送登录屏幕,但导航历史记录仍然存在,因此用户只需按后退即可返回到上一页。
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
推送到新屏幕并删除所有以前的屏幕
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LoginPage(),), (route) => false);
推送到新路线并删除所有以前的路线
Navigator.pushNamedAndRemoveUntil(context, login_page_route, (route) => false);
pushAndRemoveUntil
将删除所有现有路线并推送到新页面。
Navigator.of(context).popUntil(ModalRoute.withName('L'));
我使用 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);
}