onPressed: () {
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (ctx) => const Filter(),
),
);
},
这是我的代码。我的问题是,即使我弹出了当前屏幕,onpressed函数的其余行仍然有效。谁能解释一下onPressed()函数是如何工作的?
3条答案
按热度按时间k10s72fa1#
如果我理解了代码的逻辑,那么您希望通过Navigator. Pop导航。在onPressed中,Navigator.pop不是一个return,所以你仍然会执行Navigator.push。
你要做的是:您调用Navigator.push before,它将您重定向到此页面。push是一个future,这意味着你可以使用wait关键字。
在等待之后,您将调用
wsxa1bj12#
这很正常
**Navigator.pop(context);**将从导航堆栈中删除顶部的Route,而Navigator.push()将把另一个路由推送到导航堆栈中
这并不意味着第二条语句不会被执行,因为这两条语句都是函数的一部分,它们将按顺序执行。
在这种情况下,您应该使用if else语句。
hwamh0ep3#
一个方法将按顺序执行给它的指令。
如果对
Navigator.pop
的调用没有抛出异常(这将导致整个方法崩溃),则将执行其余指令,在您的情况下是对Navigator.push
的调用。对context
的引用可能在弹出后被修改,但请记住,它不会停止执行。如果你看一下
popAndPushNamed
方法的文档,你会发现它和你的实现很相似: