今天在做项目的时候遇到这个问题:从页面1进入页面2,在进入页面3,本来的目的是进入页面3的时候就关闭前两个页面,页面间通知我用的eventBus,通知到达了,然后我调用Navigator.pop,咦,页面3没有到达,本来即将跳转到页面3的页面2也被关闭了,顿时头大,为什么呢?
查阅官方文档,顿时豁然开朗,记住!路由管理说白了是由栈Stack来管理的,记住:
路由栈三要素:Stack,Navigator.push,Navigator.pop
Stack:栈,理解为一个通道
Navigator.push:将元素添加到栈的顶部
Navigator.pop:删除顶部元素
answer:记住一句话:Stack为栈,push将元素添加到栈的顶部,pop:删除顶部元素
原因:所以,我们进入页面三调用前两个页面的Navigator.pop时,其实是做了关闭页面的,只不过页面分布是这样的:底部->1->2->3->顶部,调用两次Navigator.pop就关闭了两次,只不过把2、3页面关闭了,还剩下底部页面1,故最后呈现在眼前的是页面1,
答案:既然我们进入页面就关闭行不通,那我们何不离开页面的时候才通知关闭呢,这样我们关闭的时候就是在当前显示的页面关闭的当前页面。