#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