我有三个屏幕:1、2、3,我想从屏幕2切换到屏幕3,但是当我弹出屏幕2并推按屏幕3时,然后它显示屏幕1一段时间,然后它显示屏幕3,那么有没有办法在推按后使用弹出切换屏幕?
Navigator.push( context, MaterialPageRoute<Widget>( builder: (context) => widget, ), ); Navigator.pop(context);
ss2ws0br1#
使用pushReplacement代替push
pushReplacement
push
Navigator.pushReplacement( context, MaterialPageRoute<Widget>( builder: (context) => widget, ), );
pkln4tw62#
使用推式代替推式导航器.pushReplacement(上下文,材料页面路径(构建器:(上下文)=〉小部件,),);
rta7y2nd3#
你所描述的行为很可能是因为当你调用Navigator.pop(context),时,它从导航栈中移除了当前屏幕(屏幕2),但是框架还没有机会构建和显示你推送的新屏幕(屏幕3),所以,在很短的一段时间内,上一个屏幕(屏幕1)是可见的。切换屏幕而不出现 Flink 的一种方法是使用Navigator. pushReplacement代替Navigator. push,然后使用Navigator. pop. Navigator. pushReplacement从导航堆栈中删除当前屏幕,并用新屏幕替换它,所有这些操作只需一步即可完成。示例:
Navigator.pop(context),
Navigator.pushReplacement( context, MaterialPageRoute<Widget>( builder: (context) => widget3, ), );
这将直接从屏幕2切换到屏幕3。
dphi5xsq4#
通常不建议在同一个函数调用中同时使用Navigator.push()和Navigator.pop(),因为这可能会导致意外行为。相反,您可以使用Navigator.replace()将当前屏幕替换为新屏幕,或者使用Navigator.pushNamedAndRemoveUntil()推送新屏幕并删除其之前的所有屏幕。
Navigator.push()
Navigator.pop()
Navigator.replace()
Navigator.pushNamedAndRemoveUntil()
4条答案
按热度按时间ss2ws0br1#
使用
pushReplacement
代替push
pkln4tw62#
使用推式代替推式
导航器.pushReplacement(上下文,材料页面路径(构建器:(上下文)=〉小部件,),);
rta7y2nd3#
你所描述的行为很可能是因为当你调用
Navigator.pop(context),
时,它从导航栈中移除了当前屏幕(屏幕2),但是框架还没有机会构建和显示你推送的新屏幕(屏幕3),所以,在很短的一段时间内,上一个屏幕(屏幕1)是可见的。切换屏幕而不出现 Flink 的一种方法是使用Navigator. pushReplacement代替Navigator. push,然后使用Navigator. pop. Navigator. pushReplacement从导航堆栈中删除当前屏幕,并用新屏幕替换它,所有这些操作只需一步即可完成。
示例:
这将直接从屏幕2切换到屏幕3。
dphi5xsq4#
通常不建议在同一个函数调用中同时使用
Navigator.push()
和Navigator.pop()
,因为这可能会导致意外行为。相反,您可以使用Navigator.replace()
将当前屏幕替换为新屏幕,或者使用Navigator.pushNamedAndRemoveUntil()
推送新屏幕并删除其之前的所有屏幕。