Флаттер: проблемы с навигацией между жизненным циклом приложения - PullRequest
1 голос
/ 26 сентября 2019

В моем приложении я использую 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");

Сценарий проблемы:

  1. Когда пользователь откроет приложение, заполните форму и попытайтесь войти
  2. Функция проверяет учетные данные илогин пользователя
  3. После успешного входа в систему у меня есть этот код для перехода на страницу Home.

    Navigator.of(context).popAndPushNamed("/home");
    

Согласно официальной документации метода popAndPushNamed ,

Извлечь текущий маршрут изнавигатор, который наиболее плотно окружает данный контекст и выдвигает именованный маршрут на его место.

Так что, насколько я понимаю, popAndPushNamed должен удалить login страницу из контекста и перейдет к home стр.

Он не работает , как ожидалось, он переходит на страницу home, но не удаляет страницу login из контекста, поскольку нажатие кнопки назад возвращает на страницу входа (даже форма находится в заполненном состоянии).

В качестве альтернативы, , если я pop текущий контекст и push для новой страницы, то она работает как ожидалось.

Navigator.pop(context); 
Navigator.of(context).pushNamed("/home");

Но все еще остается проблемой при таком подходе, когда я нажимаю кнопку back со страницы home.Экран гаснет, вместо выхода из приложения.

Вопросы:

  1. Как правильно удалить страницу login из контекста?(если пользователь нажимает кнопку «Назад», приложение закрывается)

  2. Когда пользователь выходит из системы, как удалить все страницы из контекста и перейти на страницу login?(уже пробовал, но в моем случае это не работает)

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

1 Ответ

0 голосов
/ 26 сентября 2019

вы можете попробовать это для выхода из системы:

Navigator.pushAndRemoveUntil(
    context,
    MaterialPageRoute(builder: (BuildContext context) => LoginPage()),
    ModalRoute.withName('/'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...