Gibt es eine Möglichkeit, die Android-Zurück-Schaltfläche auf einer bestimmten Seite zu deaktivieren?
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(),
},
);
}
}
Auf pageOne habe ich eine Schaltfläche, um zu pageTwo zu gelangen:
new FloatingActionButton(
onPressed: () {
Navigator.of(context).pushNamed('/pageTwo');
},
)
Mein Problem ist, dass ich, wenn ich den Zurück-Pfeil am unteren Rand des Android-Bildschirms drücke, zu pageOne zurückkehre. Ich möchte, dass dieser Button überhaupt nicht angezeigt wird. Im Idealfall möchte ich keinen Ausweg aus diesem Bildschirm haben, es sei denn, der Benutzer hält beispielsweise seinen Finger 5 Sekunden lang auf dem Bildschirm gedrückt. (Ich versuche, eine App für Kleinkinder zu schreiben, und möchte, dass nur die Eltern aus dem jeweiligen Bildschirm heraus navigieren können.)
onWillPop
Eigenschaft des Formulars zu verwenden . Es hat Zugriff auf den Formularstatus und kann zunächst überprüfen, ob ein Status vorhanden ist, den der Benutzer möglicherweise nicht verlieren möchte.onWillPop: () async { onBack(); // "DO YOUR FUNCTION IS HERE WHEN POP" return false; }
Wie Rémi Rousselet betonte,
WillPopScope
ist dies normalerweise der richtige Weg. Wenn Sie jedoch ein Stateful-Widget entwickeln, das direkt auf die Schaltfläche "Zurück" reagieren soll, können Sie Folgendes verwenden:https://pub.dartlang.org/packages/back_button_interceptor
quelle
Während Remis Antwort richtig ist, möchten Sie normalerweise nicht einfach die Zurück-Taste blockieren, sondern möchten, dass ein Benutzer den Ausgang bestätigt.
Sie können dies auf ähnliche Weise tun, indem Sie im Bestätigungsdialog eine Antwort erhalten, da dies
onWillPop
eine Zukunft ist.quelle
Ich poste dies hier, falls jemand da draußen dies findet und wünscht, er würde ein einfaches Beispiel finden https://gist.github.com/b-cancel/0ca372017a25f0c120b14dfca3591aa5
quelle
Sie können
Future.value(bool)
den Zurück-Button verwenden.quelle
onWillPop: () async => _allow
.Future.value()
Anruf teilen .Ich habe Mixin verwendet und das WillPopScope-Widget konnte den Job einfach nicht für mich erledigen. Dies ist der beste Ansatz, den ich gefunden habe, meiner Meinung nach viel besser als WillPopScope.
final bool canPop = ModalRoute.of(context)?.canPop ?? false;
Verwendet es so in der Appbar:
quelle
Die Antwort, vielleicht wussten Sie, dass WillPopScope verwendet wird , aber unter IOS können Sie leider nicht zur vorherigen Seite wischen. Passen Sie also Ihre MaterialPageRoute an:
Jetzt können Sie WillPopScope verwenden und nach hinten wischen funktioniert unter IOS. Die Detailantwort finden Sie hier: https://github.com/flutter/flutter/issues/14203#issuecomment-540663717
quelle
Fügen Sie einfach einen Container oben in der Appbar hinzu, der die Schaltfläche "Zurück" verbirgt.
quelle
Sie können folgende Methode verwenden:
Hoffe das hilft. Vielen Dank
quelle