231 votes

Flutter supprimer le bouton de retour sur l'appbar

Je me demande si quelqu'un sait comment supprimer le bouton retour qui apparaît sur la barre d'applications dans une application Flutter lorsque vous utilisez Navigator.pushNamed pour aller à une autre page. La raison pour laquelle je ne veux pas qu'il soit présent sur cette page résultante est qu'il provient de la navigation et je veux que les utilisateurs utilisent plutôt le bouton de déconnexion, afin que la session recommence.

502voto

Fabio Veronese Points 1578

Je crois que les solutions sont les suivantes

En fait, vous pouvez :

  • Ne pas vouloir afficher ce vilain bouton de retour ( :] ), et donc opter pour : AppBar(...,automaticallyImplyLeading: false,...);

  • Ne pas vouloir que l'utilisateur retourne en arrière - remplaçant la vue actuelle - et donc choisir : Navigator.pushReplacementNamed(## votre nom de route ici ##);

  • Ne pas vouloir que l'utilisateur retourne en arrière - remplaçant une certaine vue dans la pile - et donc utiliser : Navigator.pushNamedAndRemoveUntil(## votre nom de route ici ##, f(Route)bool); où f est une fonction renvoyant truequand elle rencontre la dernière vue que vous souhaitez conserver dans la pile (juste avant la nouvelle) ;

  • Ne pas vouloir que l'utilisateur retourne en arrière - JAMAIS - en vidant complètement la pile du navigateur avec : Navigator.pushNamedAndRemoveUntil(context, ## votre nom de route ici ##, (_) => false);

Santé

13 votes

C'était la réponse que je cherchais! pushReplacementNamed() ne fonctionnait pas pour moi, mais le retour en arrière de l'utilisateur s'est finalement avéré être la solution! Merci!

4 votes

En effet, c'est la meilleure réponse.

0 votes

Merci, j'ai dû utiliser "pushReplacementNamed" au lieu de "popAndPushNamed"

261voto

Jacques Points 101

Un moyen simple de supprimer le bouton retour dans la barre d'applications consiste à définir automaticallyImplyLeading sur false.

appBar: AppBar(
  title: Text("Barre d'application sans bouton retour"),
  automaticallyImplyLeading: false,
),

2 votes

Tout en restant simple à implementer, pour le scénario donné, Navigator.pushReplacementNamed est la solution correcte. Ce que vous proposez est une solution de contournement qui, si appliquée dans tous les scénarios, pourrait éventuellement entraîner un comportement incorrect, comme par exemple là où quelqu'un voudrait que AppBar continue d'impliquer le comportement de retour (c'est-à-dire le bouton de navigation arrière).

0 votes

Bien qu'il supprime l'icône de la flèche arrière, vous pouvez toujours revenir en appuyant sur le bouton arrière de l'appareil

0 votes

Si seulement j'avais lu une autre réponse plus loin, j'aurais trouvé la réponse réelle à la question. Merci

228voto

Collin Jackson Points 29995

Vous pouvez supprimer le bouton de retour en passant un new Container() vide en tant qu'argument leading à votre AppBar.

Si vous vous retrouvez à faire cela, vous ne voulez probablement pas que l'utilisateur puisse appuyer sur le bouton de retour du périphérique 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.

La fonction pushReplacementNamed supprimera l'itinéraire précédent dans la pile arrière et le remplacera par le nouvel itinéraire.

L'exemple de code complet pour ce dernier se trouve 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("Page de déconnexion"),
      ),
      body: new Center(
        child: new Text('Vous avez été déconnecté'),
      ),
    );
  }

}
class MyHomePage extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Supprimer le bouton de retour"),
      ),
      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: 'Exemple Flutter',
      home: new MyHomePage(),
      routes: {
        "/logout": (_) => new LogoutPage(),
      },
    );
  }
}

0 votes

Oui, j'ai mélangé mes commandes. Je vais essayer, Merci pour votre aide.

4 votes

@Collin, pushReplacementNamed ne semble pas supprimer la possibilité de revenir en arrière avec la flèche arrière du système.

0 votes

@Collin Jackson, Est-ce que pushReplacementNamed() supprime le widget de l'écran précédent (ainsi que toutes les données et états dépendants) ?

62voto

jitesh mohite Points 3119

automaticallyImplyLeading :

Cela vérifie si nous voulons appliquer le widget de retour (widget de précédent) sur la barre d'applications ou non. Si automaticallyImplyLeading est false, alors automatiquement de l'espace est accordé au titre et si le widget de précédent est true, alors ce paramètre n'a aucun effet.

void main() {
  runApp(
    new MaterialApp(
      home: new Scaffold(
        appBar: AppBar(
          automaticallyImplyLeading: false, // Utilisé pour supprimer le bouton de retour. 
          title: new Center(
            child: new Text("Application de démonstration"),
          ),
        ),
        body: new Container(
          child: new Center(
            child: Text("Bonjour le monde!"),
          ),
        ),
      ),
    ),
  );
}

-2voto

siva Points 19
  barreApp: new AppBar(titre: new Text("SmartDocs SPAY"),couleurFond: Colors.blueAccent, automatiquementSuggererPrécédent:false,
        précédent: new Container(),
      ),

Cela fonctionne bien

0 votes

Nous devons fournir la balise de conteneur principale: new Container()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X