Sie können die Zurück-Schaltfläche entfernen, indem Sie ein Leerzeichen new Container()
als leading
Argument an Ihre übergeben AppBar
.
Wenn Sie dies jedoch tun, möchten Sie wahrscheinlich nicht, dass der Benutzer die Zurück-Taste des Geräts drücken kann, um zur früheren Route zurückzukehren. pushNamed
Versuchen Sie, anstatt anzurufen , anzurufen, Navigator.pushReplacementNamed
damit die frühere Route verschwindet.
Das vollständige Codebeispiel für den letzteren Ansatz finden Sie unten.
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()
das vorherige Bildschirm-Widget (und alle abhängigen Daten und Zustände)?Ich glaube, die Lösungen sind die folgenden
Sie tatsächlich entweder:
Ich möchte diesen hässlichen Zurück-Button (:]) nicht anzeigen und gehe daher zu :
AppBar(...,automaticallyImplyLeading: false,...)
;Ich möchte nicht, dass der Benutzer zurückkehrt - die aktuelle Ansicht ersetzt - und sich daher für Folgendes entscheidet :
Navigator.pushReplacementNamed(## your routename here ##)
;Sie möchten nicht, dass der Benutzer zurückkehrt und eine bestimmte Ansicht im Stapel ersetzt. Verwenden Sie daher Folgendes:
Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool);
wobei f eine Funktion ist, die zurückkehrt,true
wenn Sie die letzte Ansicht treffen, die Sie im Stapel behalten möchten (direkt vor der neuen).Ich möchte nicht, dass der Benutzer zurückkehrt - NIEMALS - und den Navigatorstapel vollständig leert mit:
Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);
Prost
quelle
Eine einfache Möglichkeit, die Zurück-Schaltfläche in der AppBar zu entfernen, ist die Einstellung
automaticallyImplyLeading
auffalse
.quelle
Navigator.pushReplacementNamed
jedoch die richtige Lösung. Was Sie vorschlagen, ist eine Problemumgehung, die, wenn sie in allen Szenarien angewendet wird, möglicherweise auf falsches Verhalten schließen lässt, z. B. irgendwo, wo jemand diesAppBar
Ich möchte nur eine Beschreibung über @Jackpap hinzufügen. Antwort:
automatischImplyLeading:
Dies prüft, ob wir das hintere Widget (führendes Widget) über die App-Leiste anwenden möchten oder nicht. Wenn autoImplyLeading false ist, wird dem Titel automatisch Platz eingeräumt. Wenn das führende Widget true ist, hat dieser Parameter keine Auswirkung.
quelle
// Wenn Sie die Schaltfläche "Zurück" ausblenden möchten, verwenden Sie den folgenden Code
// Wenn Sie die Zurück-Schaltfläche ausblenden und die Pop-Aktion stoppen möchten, verwenden Sie den folgenden Code
quelle
Das AppBar-Widget hat eine Eigenschaft namens
automaticallyImplyLeading
. Standardmäßig ist der Werttrue
. Wenn Sie nicht möchten, dass das Flattern automatisch den Zurück-Button für Sie erstellt, erstellen Sie einfach die Eigenschaftfalse
.So fügen Sie Ihre benutzerdefinierte Zurück-Schaltfläche hinzu
quelle
Wenn Sie zu einer anderen Seite navigieren.
Navigator.pushReplacement()
kann verwendet werden. Es kann verwendet werden, wenn Sie vom Login zum Startbildschirm navigieren. Oder Sie können verwenden.AppBar(automaticallyImplyLeading: false)
quelle
Es funktioniert gut
quelle