Flutter导航问题:使用pushNamedAndRemoveUntil返回首页重复创建页面及Welcome页面销毁需求
Flutter导航问题:使用pushNamedAndRemoveUntil返回首页重复创建页面及Welcome页面销毁需求
嘿,我来帮你分析下这个导航问题哈~
首先说你遇到的首页重复创建的问题:你用的Navigator.pushNamedAndRemoveUntil(context,'/Home',(route) => false);这段代码,其实是先创建一个新的HomeScreen路由,然后把之前所有的路由都移除掉(因为(route) => false表示没有任何路由需要保留)。而你原来的HomeScreen其实还在导航栈里(在DebugScreen的下面),但因为你把所有旧路由都移除了,所以原来的HomeScreen被销毁,只能重新创建新的,这就是为什么 inspector 里会出现两个HomeScreen。
接下来解决你的两个需求:
1. 回到原来的HomeScreen而不是创建新的
你需要做的不是“push新的Home再删旧路由”,而是直接回到栈里已有的Home路由,同时移除中间的所有页面。可以用popUntil方法,它会一直弹出栈顶的页面,直到找到指定的路由为止:
Navigator.popUntil(context, ModalRoute.withName('/Home'));
这段代码会把Welcome3、Welcome2、Welcome1、DebugScreen依次从栈中弹出销毁,最后回到原来的HomeScreen,完全不会创建新的实例。
2. 完成Welcome页面后销毁它们,同时允许Welcome之间自由导航
上面的popUntil方法正好能满足这个需求:
- 当你在
Welcome1→Welcome2→Welcome3的时候,用普通的pushNamed或者push跳转就可以,这样这些页面会依次加入导航栈,用户可以通过返回键或者Navigator.pop()在它们之间来回切换; - 当用户在
Welcome3点击返回首页的按钮时,调用上面的popUntil方法,就能一次性把所有Welcome页面和Debug页面都从栈中移除销毁,确保不会占用内存。
另外再提醒你一下:要确保你的路由表中/Home对应的路由名称和你代码里的完全一致,不然ModalRoute.withName('/Home')可能找不到对应的路由哦~
备注:内容来源于stack exchange,提问作者dkl1203
相关产品推荐
相关产品推荐

