Flutter удалить все маршруты

Я хочу разработать кнопку выхода из системы, которая отправит меня в маршрут входа и удалит все другие маршруты из Navigator. Документация не объясняет, как создать RoutePredicate или иметь какую-либо функцию removeAll.

Ответ 1

Я смог выполнить это со следующим кодом:

Navigator.of(context)
    .pushNamedAndRemoveUntil('/login', (Route<dynamic> route) => false);

Секрет здесь заключается в использовании RoutePredicate, который всегда возвращает false (Route<dynamic> route) => false. В этой ситуации удаляются все маршруты, кроме нового маршрута /login, который я нажал.

Ответ 2

я могу сделать с помощью следующего фрагмента кода:

 Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
    LoginScreen()), (Route<dynamic> route) => false),

если вы хотите удалить весь маршрут ниже заданного маршрута, RoutePredicate всегда возвращает false, например (Route route) => false.

Ответ 3

Другой альтернативой является popUntil()

Navigator.of(context).popUntil(ModalRoute.withName('/root'));

Это отключит все маршруты, пока вы не вернетесь к названному маршруту.

Ответ 4

Вам следует рассмотреть возможность использования виджета WillPopScope для такого случая.

Не только он чище. Но у него также есть несколько бонусов:

  • Возможность показать подтверждениеDialog, например "Вы уверены, что хотите уйти?"
  • Вы не теряете свою навигационную историю. Это означает, что вы можете продолжить навигацию после регистрации.

И затем, если вы хотите закрыть приложение. Вы можете использовать функцию exit.