2017-07-07 7 views
3

Ich frage mich, ob jemand eine Möglichkeit, die Zurück-Taste, die auf der appBar in einer Flattern-App erscheint, wenn Sie Navigator.popNamed auf eine andere Seite, der Grund, warum ich nicht will, entfernt wissen Auf dieser resultierenden Seite wird angezeigt, dass sie von der Navigation kommt und ich möchte, dass Benutzer stattdessen die Schaltfläche "Abmelden" verwenden, damit die Sitzung von vorne beginnt.flattern remove zurück button auf appbar

Jede Hilfe wäre großartig.

Vielen Dank im Voraus

Antwort

6

Es gibt keine Methode popNamed genannt. Ich nehme an, du meinst pushNamed.

Sie können die Zurück-Taste entfernen, indem Sie ein new Container() als leading Argument an Ihre AppBar übergeben.

Wenn Sie sich jedoch dabei befinden, 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, versuchen Sie, Navigator.pushReplacementNamed aufzurufen, damit die frühere Route verschwindet.

Das vollständige Codebeispiel für den letzteren Ansatz ist 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(), 
     }, 
    ); 
    } 
} 
+0

Ja, ich habe meine Befehle gemischt. Ich werde es versuchen, Danke für Ihre Hilfe. – Robert

+0

@Collin, pushReplacementNamed scheint die Möglichkeit nicht zu entfernen, mit dem Zurückpfeil des Systems zurückzukehren. – Jackpap

1

Eine einfache Möglichkeit, die Zurück-Taste in der AppBar zu entfernen, ist automaticallyImplyLeading auf false gesetzt.

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

Ich glaube, die Lösungen sind die folgenden

Sie tatsächlich entweder:

  • Ich will nicht, dass hässliche Zurück-Taste angezeigt werden (:]) und damit für gehen: AppBar(...,automaticallyImplyLeading: false,...);

  • Ich will nicht der Benutzer zurück gehen - aktuelle Ansicht ersetzt - und damit gehen für: Navigator.pushReplacementNamed(## your routename here ##);

  • Ich will nicht der Benutzer zurück gehen - eine bestimmte Ansicht zurück in den Stapel zu ersetzen - und damit verwenden: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool); wobei f eine Funktion ist true zurückkehrt, wenn die letzte Ansicht treffen, die Sie wollen in halten der Stapel (direkt vor dem Neuen);

  • Sie der Benutzer nicht mehr zurück wollen - HAUPT - mit vollständig den Navigator Stapel Entleerung: Navigator.pushNamedAndRemoveUntil(## your routename here ##, (_) => false);

Prost