it-swarm.com.de

Flatter entferne den Zurück-Button in der App-Leiste

Ich frage mich, ob jemand eine Möglichkeit kennt, den Zurück-Button zu entfernen, der in einer Flatter-App auf dem appBar angezeigt wird, wenn Sie mit Navigator.pushNamed Zu einer anderen Seite wechseln. Der Grund, warum ich es auf dieser resultierenden Seite nicht möchte, ist, dass es von der Navigation kommt und ich möchte, dass Benutzer stattdessen die Schaltfläche logout verwenden, damit die Sitzung von vorne beginnt.

42
Robert

Es gibt keine Methode namens popNamed. Ich nehme an, Sie meinten pushNamed .

Sie können die Zurück-Schaltfläche entfernen, indem Sie ein leeres new Container() als leading Argument an Ihr AppBar übergeben.

Wenn Sie dies dennoch bemerken, möchten Sie wahrscheinlich nicht, dass der Benutzer die Zurück-Taste des Geräts drücken kann, um zur vorherigen Route zurückzukehren. Anstatt pushNamed aufzurufen, rufen Sie Navigator.pushReplacementNamed um die frühere Route verschwinden zu lassen.

Ein vollständiges Codebeispiel für den letzteren Ansatz finden Sie weiter 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(),
      },
    );
  }
}
69
Collin Jackson

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ückgeht - ersetzt die aktuelle Ansicht - und daher zu: Navigator.pushReplacementNamed(## your routename here ##);

  • Der Benutzer soll nicht zurückgehen - Ersetzen einer bestimmten Ansicht im Stapel - und daher verwenden: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool); wobei f eine Funktion ist, die true zurückgibt, wenn eine Besprechung stattfindet die letzte Ansicht, die Sie im Stapel behalten möchten (direkt vor der neuen);

  • Der Benutzer soll nicht zurückgehen - EVER - Den Navigator-Stack vollständig leeren mit: Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);

Prost

106
Fabio Veronese

Eine einfache Möglichkeit, die Zurück-Schaltfläche in der AppBar zu entfernen, besteht darin, automaticallyImplyLeading auf false zu setzen.

appBar: AppBar(
  title: Text("App Bar without Back Button"),
  automaticallyImplyLeading: false,
),
53
Jackpap

Ich möchte nur eine Beschreibung über @Jackpap hinzufügen. Antwort:

automaticImplyLeading:

Dies überprüft, ob wir das Back-Widget (führendes Widget) über die App-Leiste anwenden möchten oder nicht. Wenn automaticImplyLeading false ist, wird dem Titel automatisch ein Leerzeichen zugewiesen. Wenn das führende Widget true ist, hat dieser Parameter keine Auswirkung.

void main() {
  runApp(
    new MaterialApp(
      home: new Scaffold(
        appBar: AppBar(
          automaticallyImplyLeading: false, // Used for removing back buttoon. 
          title: new Center(
            child: new Text("Demo App"),
          ),
        ),
        body: new Container(
          child: new Center(
            child: Text("Hello world!"),
          ),
        ),
      ),
    ),
  );
}  
6
jitsm555