Flutter的Navigator.of(context).pop(true)的替代方案;

时间:2020-02-11 14:08:48

标签: flutter textfield

单击警报对话框“是”按钮后,我想关闭页面并返回到堆栈中的主页。我的页面包含textformfields,当我单击textformfield搜索页面的图标时打开。单击搜索列表中的任何项目后,我将返回表单页面。然后单击“后退”按钮,显示警报对话框。并单击是按钮,该错误发生。 如果我不使用警报对话框,则没有错误。 警报将我导航到主页,但搜索列表页面再次打开。我该如何解决这个错误?

我的警报对话框:

 Future<bool> _onBackPressed() {
return showDialog(
      context: context,
      builder: (context) => new AlertDialog(
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(Radius.circular(8.0))),
        title: new Text(ml(context, LC.are_you_sure)),
        content: new Text(ml(context, LC.are_you_sure_quit_query)),
        actions: <Widget>[
          new GestureDetector(
            onTap: () => Navigator.of(context).pop(false),
            child: roundedButton(ml(context, LC.no),
                Theme.of(context).primaryColor, Colors.white),
          ),
          new GestureDetector(
            onTap: () {
              Navigator.of(context).pop(true);
            },
            child: roundedButton(ml(context, LC.yes),
                Theme.of(context).primaryColor, Colors.white),
          ),
        ],
      ),
    ) ??
    false;
  }

我使用上面的代码导航到主页。还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

我想您正在询问如何删除/清除以前的路线。 您可以通过多种方式进行操作。 1 Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (context) => MainPage()), (Route<dynamic> route) => false, );

2 Navigator.pushReplacementNamed(context, '/route') for named router