首页 > 解决方案 > 几秒钟后,我使用 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()当我按下它使用的按钮时,不应该只调用它吗?主页上只有一个按钮 - 一个完全不同的按钮 - 按下时完全不同。那么为什么它会跳回来,我该如何避免呢?

标签: androidflutterfuture

解决方案


Navigator 将其路线保存在堆栈中。因此,当您推送它时,它会将您推送的路线添加到堆栈顶部!这可能解释了你所面临的奇怪行为。

如果您想返回主屏幕,您应该使用Navigator.pop(). 但是,您正在使用一个showDialog()函数。所以第一个pop()将针对对话框本身,然后第二个pop()将移动到前一个屏幕。

如果您只想将用户发送主屏幕并关闭所有其他路线,您可以使用:

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

推荐阅读