Existe-t-il un moyen de désactiver le bouton de retour Android sur une page spécifique?
class WakeUpApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: "Time To Wake Up ?",
home: new WakeUpHome(),
routes: <String, WidgetBuilder>{
'/pageOne': (BuildContext context) => new pageOne(),
'/pageTwo': (BuildContext context) => new pageTwo(),
},
);
}
}
Sur la pageOne j'ai un bouton pour aller à la pageDeux:
new FloatingActionButton(
onPressed: () {
Navigator.of(context).pushNamed('/pageTwo');
},
)
Mon problème est que si j'appuie sur la flèche Retour en bas de l'écran Android, je retourne à pageOne. J'aimerais que ce bouton n'apparaisse pas du tout. Idéalement, je voudrais n'avoir aucun moyen de sortir de cet écran à moins que l'utilisateur par exemple garde son doigt appuyé sur l'écran pendant 5 secondes. (J'essaie d'écrire une application pour les tout-petits, et je voudrais que seuls les parents puissent sortir de l'écran particulier).
onWillPop
propriété du formulaire . Il a accès à l'état du formulaire et peut d'abord vérifier s'il existe un état que l'utilisateur ne souhaite pas perdre.onWillPop: () async { onBack(); // "DO YOUR FUNCTION IS HERE WHEN POP" return false; }
Comme l'a souligné Rémi Rousselet,
WillPopScope
c'est généralement la voie à suivre. Cependant, si vous développez un widget avec état qui devrait réagir directement au bouton de retour, vous pouvez utiliser ceci:https://pub.dartlang.org/packages/back_button_interceptor
Remarque: je suis l'auteur de ce package.
la source
Bien que la réponse de Remi soit juste, généralement vous ne voulez pas simplement bloquer le bouton de retour, mais voulez qu'un utilisateur confirme la sortie.
Vous pouvez le faire de la même manière en obtenant une réponse dans la boîte de dialogue de confirmation, car
onWillPop
c'est un avenir.la source
Je poste ceci ici au cas où quelqu'un trouverait ceci et souhaiterait trouver un exemple simple https://gist.github.com/b-cancel/0ca372017a25f0c120b14dfca3591aa5
la source
Vous pouvez utiliser
Future.value(bool)
pour gérer le bouton de retour.la source
onWillPop: () async => _allow
.Future.value()
appel.J'ai utilisé mixin et le widget WillPopScope ne pouvait tout simplement pas faire le travail pour moi. C'est la meilleure approche que j'ai trouvée, bien meilleure que WillPopScope à mon avis.
final bool canPop = ModalRoute.of(context)?.canPop ?? false;
Utilisé comme ceci dans la barre d'application:
la source
La réponse peut-être que vous saviez que cela utilise WillPopScope , mais malheureusement sur IOS, vous ne pouvez pas glisser pour revenir à la page précédente, alors personnalisons votre MaterialPageRoute:
Vous pouvez maintenant utiliser WillPopScope et faire glisser vers l'arrière fonctionnera sur IOS. La réponse détaillée est ici: https://github.com/flutter/flutter/issues/14203#issuecomment-540663717
la source
Ajoutez simplement un conteneur au début de l'Appbar qui masque le bouton de retour.
la source