Флаттер: перейти на новый экран без спины - PullRequest
0 голосов
/ 26 апреля 2018

Я использую поток аутентификации в своем приложении Flutter.

После попытки входа CheckAuth (который проверяет, вошел ли пользователь в систему или нет, а затем открывает домашний экран или знаксоответственно вверх по экрану) открывается с этим кодом:

  void _signIn() async {
    await _auth
        .signInWithEmailAndPassword(
            email: _userEmail.trim(), password: _userPassword.trim())
        .then((task) {
      // go to home screen
      if (task.getIdToken() != null) {
        setState(() {
          Navigator.pushReplacement(
              context,
              new MaterialPageRoute(
                  builder: (BuildContext context) => new CheckAuth()));
        });
      } else {
        print("Authentication failed");
      }
    });
  }

Проблема: я могу успешно войти в приложение, но если я нажму кнопку «Назад» после входа в систему, она вернется к значкуна экране (пока я ожидаю выхода из приложения).

Вопрос: Как перейти с одного экрана на другой во флаттере без обратного пути?

Есть лиМне нужно как-то удалить историю навигатора?Или вообще не пользуетесь навигатором?Я попробовал Navigator.replace метод, но, похоже, он не работал.

Ответы [ 3 ]

0 голосов
/ 25 июля 2018

Вам нужно использовать

Navigator
    .of(_context)
    .pushReplacement(new MaterialPageRoute(builder: (BuildContext context) => page));

Где _context является объектом BuildContext И page - это страница, которую вы указали.

0 голосов
/ 02 мая 2019

Вы можете использовать метод pushAndRemoveUntil:

Вставить указанный маршрут в навигатор, который наиболее плотно охватывает данный контекст, а затем удалить все предыдущие маршруты, пока predicate не вернет true, Чтобы удалить все маршруты ниже проталкиваемого маршрута, используйте [RoutePredicate], который всегда возвращает false (например, (Route<dynamic> route) => false).

Navigator.pushAndRemoveUntil(
  context,
  MaterialPageRoute(builder: (context) => MainPage()),
  (Route<dynamic> route) => false,
);
0 голосов
/ 26 апреля 2018

Вам нужно использовать Navigator.pushReplacement, когда , оставляя экран аутентификации тоже.Не только при перенаправлении на страницу входа.

...