web-dev-qa-db-fra.com

bouton de suppression du flottement dans la barre de menu

Je me demande si quelqu'un connaît un moyen de supprimer le bouton Précédent qui apparaît sur la appBar d'une application flottante lorsque vous utilisez Navigator.pushNamed pour accéder à une autre page. La raison pour laquelle je ne le souhaite pas sur cette page résultante est que cela provient de la navigation et que je veux que les utilisateurs utilisent le bouton logout à la place, pour que la session reprenne.

42
Robert

Il n'y a pas de méthode appelée popNamed. Je suppose que vous vouliez dire pushNamed .

Vous pouvez supprimer le bouton Précédent en passant un argument new Container() vide en tant que leading à votre AppBar .

Toutefois, si vous vous trouvez dans cette situation, vous ne voulez probablement pas que l'utilisateur puisse appuyer sur le bouton Précédent de l'appareil pour revenir à l'itinéraire précédent. Au lieu d'appeler pushNamed, essayez d'appeler Navigator.pushReplacementNamed pour faire disparaître l'itinéraire précédent.

Vous trouverez ci-dessous un exemple de code complet pour cette dernière approche.

_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

Je crois que les solutions sont les suivantes

Vous avez réellement soit:

  • Vous ne voulez pas afficher ce bouton de retour moche (:]), et donc aller pour: AppBar(...,automaticallyImplyLeading: false,...);

  • Ne veut pas que l'utilisateur retourne - remplace la vue actuelle - et va donc: Navigator.pushReplacementNamed(## your routename here ##);

  • Ne veut pas que l'utilisateur retourne - remplace une certaine vue dans la pile - et utilise donc: Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool); où f est une fonction retournant true lorsque vous rencontrez la dernière vue vous voulez rester dans la pile (juste avant le nouveau);

  • Ne veut pas que l'utilisateur retourne - EVER - vide complètement la pile de navigation avec: Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);

À votre santé

106
Fabio Veronese

Un moyen simple de supprimer le bouton Précédent de la barre d’application consiste à définir automaticallyImplyLeading sur false.

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

Je veux juste ajouter une description à la réponse de @Jackpap:

automatiquementImplyLeading:

Cela vérifie si nous souhaitons appliquer le widget précédent (widget principal) sur la barre d'applications ou non. Si le paramètre automatiquementImplyLeading est défini sur false, un espace est automatiquement attribué au titre. Si le widget de début est défini sur true, ce paramètre n'a aucun effet.

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