GetX实现指定页面回退:页面5返回至页面2,页面2返回至页面1
解决方案
针对你的需求,有两种简洁的实现方式,以下是具体说明:
方式一:修改页面跳转逻辑,构建正确路由栈
这种方式会让路由栈天然形成 页面1 → 页面2 → 页面5 的结构,无需自定义返回逻辑,完全依赖GetX的默认返回行为:
在页面1跳转至页面5时,先将页面2加入路由栈,再跳转至页面5,代码示例:
// 页面1中触发跳转的代码 // 先添加页面2到路由栈(不显示页面2) final page2Route = MaterialPageRoute(builder: (_) => Page2()); Get.rawRoute?.add(page2Route); // 再调用你的goToScreen方法跳转页面5 goToScreen(Page5());
这样路由栈会变为 [页面1, 页面2, 页面5],点击返回按钮时,页面5会回到页面2,页面2回到页面1,完全符合需求。
方式二:自定义页面5的返回逻辑
如果不想修改原有跳转逻辑,直接在页面5中重写返回行为即可:
1. 自定义返回按钮点击事件
在页面5的返回按钮中,使用 Get.off() 替代默认的 Get.back():
IconButton( icon: Icon(Icons.arrow_back), onPressed: () { // 跳转到页面2,同时移除当前页面5的路由记录 Get.off(() => Page2()); }, )
2. 处理系统返回键(安卓)
为了让安卓系统的物理返回键也生效,用 WillPopScope 包裹页面5的布局:
@override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async { Get.off(() => Page2()); return false; // 阻止默认的系统返回行为 }, child: Scaffold( appBar: AppBar( leading: IconButton( icon: Icon(Icons.arrow_back), onPressed: () { Get.off(() => Page2()); }, ), ), // 页面5的其他内容 ), ); }
页面2无需修改,默认的 Get.back() 会直接回到页面1。
两种方式都能满足你的需求,方式一更贴合路由栈的天然逻辑,方式二更灵活,无需改动原有跳转流程,可根据你的实际场景选择。
内容的提问来源于stack exchange,提问作者Thu Nguyen Quang
相关产品推荐
相关产品推荐

