Флаттер: как нажать навигационный маршрут без кнопки «Назад»?

#flutter #dart #navigation

#трепетание #дротик #навигация #флаттер

Вопрос:

Я понимаю, что Navigator.pushReplacementNamed это позволяет вам заменить текущий экран в обратном стеке, но как вы справляетесь со случаями, когда на текущем экране уже есть своя кнопка возврата?

Я заметил, что если я использую .pushReplacementNamed функцию в этом случае, она сохраняет кнопку «Назад» с предыдущего экрана, но я хотел бы иметь этот поток:

Экран A .pushNamed -> Экран B (с возможностью перехода обратно к A) .pushReplacementNamed -> Экран C (не должен иметь возможности перехода обратно ни к B, ни к A)

Ответ №1:

Если вы используете AppBar виджет на целевом экране, убедитесь, что вы добавили эту строку внутри своего AppBar виджета, что предотвратит автоматическое добавление приложением кнопки «Назад» по умолчанию на AppBar :

     automaticallyImplyLeading: false,
  

Но, используете вы AppBar его или нет, и вы не хотите переходить к предыдущему экрану, нажав на кнопку «Назад» (физическую кнопку или слайд-жест Купертино), вы должны использовать WillPopScope его в качестве корневого виджета на целевом экране. Кроме того, ваш onWillPop метод должен выглядеть следующим образом:

 onWillPop: () async => false,
  

возвращая значение false, вы ограничиваете выход экрана из экрана, и теперь вы не можете выйти из приложения, нажав кнопку «Назад». Потому что вы возвращаетесь false в качестве решения, хотите ли вы вернуться или нет. Вы можете использовать exit(0) на этом этапе внутри onWillPop метода, если хотите закрыть новый экран приложения.

Ответ №2:

вы должны обернуть корневой виджет с помощью WillPopScope, чтобы иметь возможность обрабатывать кнопку «Назад»

пример ниже

 class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
  return new WillPopScope(
    onWillPop: () async => false,
    child: Scaffold(
      appBar: AppBar(
        title: Text("WillPopScope example"),
      ),
      body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              RaisedButton(
                child: Text('Back'),
                onPressed: () {
                  Navigator.pop(context);
                },
              ),
            ],
          )
      ),
    ),
  );
}
  

}

Ответ №3:

Переопределение кнопок «Назад» может вам помочь.

Пожалуйста, найдите ведущий аргумент для AppBar и WillPopScope