我用Future.delayed()在几秒钟后切换到一个新屏幕,但它一次又一次地跳到那个页面



奇怪的问题,但我似乎无法解决。我用Future.delayed()切换到另一个屏幕,如下所示:

TextButton(
label: Text('Submit'),
onPressed: () {
showDialog(context: context,
builder: (context) {
Future.delayed(Duration(seconds: 6), () {
Navigator.pushNamed(context,'/',);
});
}
)

它还显示了一个带文本的AlertDialog,我现在没有包括它,但更重要的是,它会在6秒后将用户带回主页。这种情况发生在应用程序的"末尾"。然而,当我再次开始使用该应用程序时,它在6秒钟后再次跳回主页。当我什么都不按时,什么也没发生

Future.delayed()不应该只在我按下它使用的按钮时调用吗?主页上只有一个按钮——一个完全不同的按钮——按下后会做完全不同的事情。那么,为什么它会跳回来,我该如何避免呢?

导航器将其路线保存在堆栈中。所以,当你推到它时,它会将你推到堆栈顶部的路线添加进去!这也许可以解释你所面临的怪异行为。

如果你想回到主屏幕,你应该使用Navigator.pop()。但是,您使用的是showDialog()函数。因此,第一个pop()将以对话框本身为目标,然后第二个pop()将移动到上一个屏幕。

如果您只想将用户发送回主屏幕并忽略所有其他路由,您可以使用以下方法:

void _goHome() {
navigator.pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) => MyHomePage()),
ModalRoute.withName('/'),
);
}

最新更新