Você pode remover o botão Voltar passando um vazio new Container()
como o leading
argumento para seu AppBar
.
No entanto, se você estiver fazendo isso, provavelmente não deseja que o usuário possa pressionar o botão Voltar do dispositivo para voltar à rota anterior. Em vez de ligar pushNamed
, tente ligar Navigator.pushReplacementNamed
para fazer com que a rota anterior desapareça.
O exemplo de código completo para a última abordagem está abaixo.
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()
descarta o widget de tela anterior (e todos os dados e estados dependentes)?Eu acredito que as soluções são as seguintes
Você na verdade:
Não queira exibir aquele botão voltar feio (:]) e, portanto, vá para
AppBar(...,automaticallyImplyLeading: false,...)
:;Não quer que o usuário volte - substituindo a visão atual - e, portanto, vá para
Navigator.pushReplacementNamed(## your routename here ##)
:;Não quer que o usuário volte - substituindo uma determinada visão de volta na pilha - e, portanto, use:
Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool);
onde f é uma função que retornatrue
ao encontrar a última visão que você deseja manter na pilha (logo antes da nova);Não quero que o usuário volte - SEMPRE - esvaziando completamente a pilha do navegador com:
Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);
Felicidades
fonte
Uma maneira simples de remover o botão Voltar no AppBar é definir
automaticallyImplyLeading
comofalse
.fonte
Navigator.pushReplacementNamed
é a solução correta. O que você sugere é uma solução alternativa que, se aplicada em todos os cenários, pode eventualmente inferir um comportamento errado, como em algum lugar que alguém gostaria queAppBar
continue a implicar no comportamento de liderança (ex .: botão de navegação voltar)Só quero adicionar alguma descrição sobre a resposta de @Jackpap:
automaticImplyLeading:
Isso verifica se queremos aplicar o widget de volta (widget principal) sobre a barra de aplicativos ou não. Se o automaticImplyLeading for false, então automaticamente espaço será dado ao título e se o widget principal for true, então este parâmetro não tem efeito.
fonte
// se você deseja ocultar o botão Voltar, use o código abaixo
// se você deseja ocultar o botão Voltar e parar a ação pop, use o código abaixo
fonte
O widget AppBar tem uma propriedade chamada
automaticallyImplyLeading
. Por padrão, seu valor étrue
. Se você não quiser vibração, crie automaticamente o botão Voltar para você, basta fazer a propriedadefalse
.Para adicionar seu botão Voltar personalizado
fonte
Use isso para fitas AppBar
Use isto para Appbar normal
fonte
Se estiver navegando para outra página.
Navigator.pushReplacement()
pode ser usado. Ele pode ser usado se você estiver navegando do login para a tela inicial. Ou você pode usar.AppBar(automaticallyImplyLeading: false)
fonte
Está funcionando bem
fonte