Vous pouvez supprimer le bouton de retour en passant un vide new Container()
comme leading
argument à votreAppBar
.
Cependant, si vous vous trouvez en train de faire cela, vous ne voulez probablement pas que l'utilisateur puisse appuyer sur le bouton de retour de l'appareil pour revenir à l'itinéraire précédent. Au lieu d'appeler pushNamed
, essayez d'appelerNavigator.pushReplacementNamed
pour faire disparaître l'itinéraire précédent.
Un exemple de code complet pour cette dernière approche est ci-dessous.
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()
dispose- t-il du widget d'écran précédent (et de toutes les données et états dépendants)?Je crois que les solutions sont les suivantes
Vous en fait soit:
Je ne veux pas afficher ce vilain bouton de retour (:]), et donc optez pour
AppBar(...,automaticallyImplyLeading: false,...)
:;Je ne veux pas que l'utilisateur revienne en arrière - remplaçant la vue actuelle - et opte donc pour
Navigator.pushReplacementNamed(## your routename here ##)
:;Je ne veux pas que l'utilisateur revienne en arrière - en remplaçant une certaine vue dans la pile - et utilise donc:
Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool);
où f est une fonction retournanttrue
lors de la rencontre avec la dernière vue que vous souhaitez conserver dans la pile (juste avant la nouvelle);Je ne veux pas que l'utilisateur revienne - JAMAIS - en vidant complètement la pile du navigateur avec:
Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);
À votre santé
la source
Un moyen simple de supprimer le bouton de retour dans l'AppBar consiste à définir
automaticallyImplyLeading
surfalse
.la source
Navigator.pushReplacementNamed
c'est la bonne solution. Ce que vous suggérez est une solution de contournement qui, si elle est appliquée dans tous les scénarios, peut éventuellement déduire un comportement incorrect, comme quelque part que quelqu'un aimerait que leAppBar
continue d'impliquer le comportement principal (par exemple: bouton de navigation arrière)Je veux juste ajouter une description sur la réponse @Jackpap:
automatiquementImplyLeading:
Cela vérifie si nous voulons appliquer le widget arrière (widget principal) sur la barre d'application ou non. Si la valeur automaticImplyLeading est false, un espace est automatiquement attribué au titre et si si le widget principal est true, ce paramètre n'a aucun effet.
la source
// si vous voulez masquer le bouton retour, utilisez le code ci-dessous
// si vous voulez masquer le bouton de retour et arrêter l'action pop, utilisez le code ci-dessous
la source
Le widget AppBar a une propriété appelée
automaticallyImplyLeading
. Par défaut, sa valeur esttrue
. Si vous ne voulez pas que le flutter crée automatiquement le bouton de retour pour vous, créez simplement la propriétéfalse
.Pour ajouter votre bouton de retour personnalisé
la source
Si vous naviguez vers une autre page.
Navigator.pushReplacement()
peut être utilisé. Il peut être utilisé si vous naviguez de la connexion à l'écran d'accueil. Ou vous pouvez utiliser.AppBar(automaticallyImplyLeading: false)
la source
Utilisez ceci pour les slivers AppBar
Utilisez ceci pour la barre d'applications normale
la source
Ça marche bien
la source