Puis-je attraper l'événement onBackPressed
depuis le bouton retour d'Android?
J'ai essayé la variable WillPopScope
mais ma fonction onWillPop
ne s'est déclenchée que lorsque je clique sur le bouton fléché Retour de la matière
Je le mets comme ça:
class MyView extends StatelessWidget{
Widget build(BuildContext context) {
return new WillPopScope(
onWillPop: () async {
debugPrint("Will pop");
return true;
},
child: ScopedModel<AppModel>(
model: new AppModel(),
child: new Scaffold(......
Je dois le comprendre car mon écran s’est mal comporté lorsqu’il a été appuyé sur le bouton précédent, l’écran et l’écran situé en dessous s’affiche, mais d’une manière ou d’une autre, l’utilisation du bouton fléché vers l’arrière fonctionne de manière normale.
mettre à jour:
the code works, my problem was not in the pop of this screen, but on the previous screen, I use 2 MaterialApp widgets, and somehow it gave a weird behavior.
Pour éviter de revenir en arrière WillPopScope est le bon moyen et doit être utilisé comme suit:
class Page2Route extends MaterialPageRoute {
Page2Route() : super(builder: (context) => new Page2());
}
class Page2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new WillPopScope(
child: new Scaffold(
appBar: new AppBar(
title: new Text('Page 2'),
),
body: new Center(
child: new Text('PAGE 2'),
),
),
onWillPop: () {
return new Future(() => false);
},
);
}
}
Peut appeler la page comme:
Navigator.of(context).Push(new Page2Route());
Ne pas utiliser l'approche ci-dessous pour la navigation, car il y a quelques problèmes avec le dernier Flutter:
Navigator.Push(context, new Page2Route());
Ce code fonctionne pour moi.
Je pense qu'il peut y avoir deux raisons.
Aucun retour dans onWillPop
return new WillPopScope(
onWillPop: () {
if (!_isOpened) Navigator.pop(context);
},
child: new Scaffold(
key: SharedService.orderScaffoldKey,
appBar: appBar,
body: new Builder(
builder: (BuildContext context) {
return page;
},
),
),
);
C’est ainsi que j’ai mis en œuvre le mien et que cela fonctionne bien pour moi. Vous pouvez l'essayer.
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
_moveToSignInScreen(context);
},
child: Scaffold(
key: _scaffoldKey,
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
_moveToSignInScreen(context);
}),
title: Text("Profile"),
),
),
);
}
void _moveToSignInScreen(BuildContext context) =>
Navigator.pushReplacementNamed(context, Routes.keySignIn);