Flutter中切换新根路由且不保留旧路由到堆栈中的实现方法
你现在使用的Navigator.push是将新路由压入路由栈顶部,不会销毁旧的根路由,因此点击返回按钮会回到上一个路由页面。如果需要切换根路由同时清除旧的根路由,可以根据你的使用场景选择以下两种方案:
方案1:替换当前栈顶路由
如果你只需要替换当前的栈顶路由(比如从启动页/登录页跳转到首页,仅需要销毁上一级的旧根路由),使用Navigator.pushReplacement方法即可,该方法会将当前栈顶的路由替换为新路由,旧路由会被销毁:
Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => HomeScreen()) );
方案2:清空整个路由栈,设置新的唯一根路由
如果你需要清除路由栈中所有已存在的路由,将新路由作为唯一的根节点(比如用户退出登录后跳转到登录页,不允许返回到登录前的页面),使用Navigator.pushAndRemoveUntil方法:
Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (context) => HomeScreen()), // 该判断返回false时,会移除路由栈中所有旧的路由 (Route<dynamic> route) => false );
官方文档对应说明:
切换新路由可使用Navigator.push()方法,该方法会将Route添加到Navigator管理的路由堆栈中。
该方法的设计逻辑就是仅新增路由不删除旧路由,以上两个方案均是基于Navigator原生提供的替换类API实现,不需要额外引入第三方依赖。
内容的提问来源于stack exchange,提问作者Asmoun
相关产品推荐
相关产品推荐

