前提:页面打开顺序A->B->C,当前所在页面为C
1、popUntil
a.所有页面销毁,app黑屏,
dispose时,会从第一个页面开始dispose,例如a-b-c
Navigator.popUntil(context, (route) => false);
b.页面直接报错
Navigator.popUntil(context, (route) => null);
c.pop直到当前页面是B页面时停止
dispose时,会从第一个页面开始dispose,例如页面打开顺序a-b-c-d,关闭时是c-d
Navigator.popUntil(context, ModalRoute.withName('/B'));
2、popAndPushNamed
先打开B,在关闭自己(C)
Navigator.popAndPushNamed(context, '/B');
3、pushReplacementNamed
先打开B,在关闭自己(C)
Navigator.pushReplacementNamed(context, '/B');
4、pushNamedAndRemoveUntil
a.先打开一个新的页面,再删除路由栈中所有的页面,此时新页面会是路由栈中第一个页面
(即使打开的是根路由,也会把路由栈中的删掉)
- 方法1、2、3效果一样,打开新页面,干掉所有页面,新页面会成功第一个页面
- 页面dispose时,会从第一个页面开始销毁
1、Navigator.pushNamedAndRemoveUntil(context, '/', (route) => false);
2、Navigator.pushNamedAndRemoveUntil(context, '/', (route) => route == null,);
3、Navigator.pushNamedAndRemoveUntil(context, '/two', (route) => false);
b.打开一个新页面C,干到其他页面,直到当前页是B
Navigator.pushNamedAndRemoveUntil(context, '/C', ModalRoute.withName('/B'));
- 如果新页面和条件是同一个页面,栈中会有2个相同的页面,例如:
Navigator.pushNamedAndRemoveUntil(context, '/B', ModalRoute.withName('/B'));
网友评论