В моем приложении я использую routes
для навигации по страницам.
Вот как я реализовал маршрут:
В main.dart
файле я определил маршруты, как этот:
bool session = await isValidSession(); //queries database and validate session
if (session) {
_defaultHome = new HomePage();
}
final routes = {
'/login': (BuildContext context) => new LoginPage(),
'/home': (BuildContext context) => new HomePage(),
//several other pages
'/logout' : (BuildContext context) => new LogoutPage(),
};
Я передал этот маршрут в качестве аргумента методу runApp
:
runApp(new MaterialApp(
title: 'My Application',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: _defaultHome,
routes: routes,
));
Страницы доступны для навигации по меню ящика.Когда пользователь введет Tap
в меню, этот код будет выполнен и приведет клиента на соответствующую страницу.
Navigator.of(context).pushNamed("/PAGE_NAME");
Сценарий проблемы:
- Когда пользователь откроет приложение, заполните форму и попытайтесь войти
- Функция проверяет учетные данные илогин пользователя
После успешного входа в систему у меня есть этот код для перехода на страницу Home
.
Navigator.of(context).popAndPushNamed("/home");
Согласно официальной документации метода popAndPushNamed ,
Извлечь текущий маршрут изнавигатор, который наиболее плотно окружает данный контекст и выдвигает именованный маршрут на его место.
Так что, насколько я понимаю, popAndPushNamed
должен удалить login
страницу из контекста и перейдет к home
стр.
Он не работает , как ожидалось, он переходит на страницу home
, но не удаляет страницу login
из контекста, поскольку нажатие кнопки назад возвращает на страницу входа (даже форма находится в заполненном состоянии).
В качестве альтернативы, , если я pop
текущий контекст и push
для новой страницы, то она работает как ожидалось.
Navigator.pop(context);
Navigator.of(context).pushNamed("/home");
Но все еще остается проблемой при таком подходе, когда я нажимаю кнопку back
со страницы home
.Экран гаснет, вместо выхода из приложения.
Вопросы:
Как правильно удалить страницу login
из контекста?(если пользователь нажимает кнопку «Назад», приложение закрывается)
Когда пользователь выходит из системы, как удалить все страницы из контекста и перейти на страницу login
?(уже пробовал, но в моем случае это не работает)
Navigator.of(context).popUntil(ModalRoute.withName('/login'));