Вы можете удалить кнопку возврата, передав пустое значение new Container()
в качестве leading
аргумента в ваш AppBar
.
Однако, если вы обнаружите, что делаете это, вы, вероятно, не хотите, чтобы пользователь мог нажать кнопку возврата устройства, чтобы вернуться к более раннему маршруту. Вместо звонка pushNamed
попробуйте позвонить, Navigator.pushReplacementNamed
чтобы предыдущий маршрут исчез.
Полный пример кода для последнего подхода приведен ниже.
import 'package:flutter/material.dart';
class LogoutPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Logout Page"),
),
body: new Center(
child: new Text('You have been logged out'),
),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Remove Back Button"),
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.fullscreen_exit),
onPressed: () {
Navigator.pushReplacementNamed(context, "/logout");
},
),
);
}
}
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
routes: {
"/logout": (_) => new LogoutPage(),
},
);
}
}
pushReplacementNamed()
предыдущий виджет экрана (и все зависимые данные и состояния)?Я считаю, что решения следующие
На самом деле вы либо:
Не хочу , чтобы отобразить эту кнопку некрасиво назад (:]), и , таким образом , пойти на:
AppBar(...,automaticallyImplyLeading: false,...)
;Не хочу, чтобы пользователь возвращался - заменяя текущее представление - и, таким образом, делал
Navigator.pushReplacementNamed(## your routename here ##)
:;Не хочу, чтобы пользователь возвращался назад - заменяя определенное представление обратно в стеке - и поэтому используйте:
Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool);
где f - функция, возвращающаясяtrue
при встрече с последним представлением, которое вы хотите сохранить в стеке (прямо перед новым);Не хочу, чтобы пользователь возвращался - НИКОГДА - полностью опустошая стек навигатора:
Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);
Ура
источник
Простой способ убрать кнопку возврата на панели приложений - установить
automaticallyImplyLeading
значениеfalse
.источник
Navigator.pushReplacementNamed
это правильное решение. Вы предлагаете обходной путь, который, если он применяется во всех сценариях, может в конечном итоге привести к неправильному поведению, например, где-то, что кому-то хотелось бы,AppBar
продолжает подразумевать ведущее поведение (например, кнопка навигации назад)Просто хочу добавить описание к ответу @Jackpap:
automaticImplyLeading:
Это проверяет, хотим ли мы применить задний виджет (ведущий виджет) на панели приложения или нет. Если automaticImplyLeading имеет значение false, тогда заголовку автоматически выделяется пробел, а если ведущий виджет имеет значение true, этот параметр не имеет никакого эффекта.
источник
// если вы хотите скрыть кнопку возврата, используйте код ниже
// если вы хотите скрыть кнопку возврата и остановить всплывающее действие, используйте код ниже
источник
У виджета AppBar есть свойство, называемое
automaticallyImplyLeading
. По умолчанию это значениеtrue
. Если вы не хотите, чтобы флаттер автоматически создавал кнопку возврата, просто создайте свойствоfalse
.Чтобы добавить собственную кнопку возврата
источник
При переходе на другую страницу.
Navigator.pushReplacement()
может быть использован. Его можно использовать, если вы переходите из входа в систему на главный экран. Или вы можете использовать.AppBar(automaticallyImplyLeading: false)
источник
Используйте это для ленты AppBar
Используйте это для нормальной панели приложений
источник
Он работает нормально
источник