Puede eliminar el botón Atrás pasando un vacío new Container()
como leading
argumento a su AppBar
.
Sin embargo, si se encuentra haciendo esto, probablemente no desee que el usuario pueda presionar el botón de retroceso del dispositivo para volver a la ruta anterior. En lugar de llamar pushNamed
, intente llamar Navigator.pushReplacementNamed
para que desaparezca la ruta anterior.
A continuación se muestra un ejemplo de código completo para el último enfoque.
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()
widget de pantalla anterior (y todos los datos y estados dependientes)?Creo que las soluciones son las siguientes
En realidad, tampoco:
No quiero mostrar ese feo botón de retroceso (:]) y, por lo tanto, elija
AppBar(...,automaticallyImplyLeading: false,...)
:;No quiero que el usuario retroceda, reemplazando la vista actual , y así opte por
Navigator.pushReplacementNamed(## your routename here ##)
:;No quiero que el usuario regrese, reemplazando una determinada vista en la pila , y por lo tanto use:
Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool);
donde f es una función que regresatrue
cuando se encuentra con la última vista que desea mantener en la pila (justo antes de la nueva);No quiero que el usuario regrese, NUNCA , vaciando completamente la pila del navegador con:
Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);
Salud
fuente
Una forma sencilla de eliminar el botón Atrás en la AppBar es establecer
automaticallyImplyLeading
enfalse
.fuente
Navigator.pushReplacementNamed
es la solución correcta. Lo que sugiere es una solución que, si se aplica en todos los escenarios, eventualmente puede inferir un comportamiento incorrecto, como en algún lugar donde a alguien le gustaría queAppBar
continúe implicando el comportamiento principal (es decir, el botón de navegación hacia atrás)Solo quiero agregar una descripción sobre la respuesta de @Jackpap:
automaticImplyLeading:
Esto verifica si queremos aplicar el widget posterior (widget principal) sobre la barra de la aplicación o no. Si automaticImplyLeading es falso, automáticamente se le da espacio al título y si el widget principal es verdadero, entonces este parámetro no tiene ningún efecto.
fuente
// si desea ocultar el botón Atrás, use el siguiente código
// si desea ocultar el botón Atrás y detener la acción emergente, use el siguiente código
fuente
El widget AppBar tiene una propiedad llamada
automaticallyImplyLeading
. Por defecto, su valor estrue
. Si no desea que Flutter cree automáticamente el botón Atrás, simplemente cree la propiedadfalse
.Para agregar su botón de retroceso personalizado
fuente
Use esto para astillas AppBar
Use esto para la barra de aplicaciones normal
fuente
Si navega a otra página.
Navigator.pushReplacement()
puede ser usado. Se puede usar si está navegando desde el inicio de sesión hasta la pantalla de inicio. O puedes usar.AppBar(automaticallyImplyLeading: false)
fuente
Está funcionando bien
fuente