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