Flutter-альтернатива Navigator.of (context) .pop (true); - PullRequest
1 голос
/ 11 февраля 2020

Я хочу закрыть страницу и вернуться на главную страницу в стеке после нажатия кнопки предупреждения «Да». Моя страница содержит текстовые поля, и когда я щелкаю значок, открывается страница поиска текстового поля. После того, как я щелкну любой элемент списка поиска, я вернусь на страницу формы. И я нажимаю кнопку «Назад» для отображения предупреждения. И нажмите кнопку Да, ошибка происходит. И если я не использую диалоговое окно с предупреждением, ошибки нет. Оповещение направляет меня на главную страницу, но страница списка поиска открывается снова. Как я могу решить эту ошибку?

Мой диалог предупреждения:

 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 Ответ

1 голос
/ 11 февраля 2020

Я думаю, вы спрашиваете, как удалить / очистить предыдущие маршруты. Есть разные способы сделать это. 1 Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (context) => MainPage()), (Route<dynamic> route) => false, );

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

...