Ich habe folgendes AlertDialog
.
showDialog(
context: context,
child: new AlertDialog(
title: const Text("Location disabled"),
content: const Text(
"""
Location is disabled on this device. Please enable it and try again.
"""),
actions: [
new FlatButton(
child: const Text("Ok"),
onPressed: _dismissDialog,
),
],
),
);
Wie kann ich _dismissDialog()
entlassen sagen AlertDialog
?
android
ios
flutter
flutter-alertdialog
Gustash
quelle
quelle
onPressed: () => Navigator.pop(context),
Navigator.of(context, rootNavigator: true).pop('dialog')
arbeitete mit mir.
quelle
hat für mich gearbeitet, aber die Galerie des Flutter-Teams enthält ein Beispiel mit:
Navigator.of(context, rootNavigator: true).pop()
Das funktioniert auch, und ich bin versucht, ihrem Beispiel zu folgen.
quelle
Wenn Sie kein Ergebnis zurückgeben möchten, verwenden Sie eines der folgenden Elemente:
Wenn Sie jedoch ein Ergebnis zurückgeben möchten, lesen Sie dies
Beispiel:
showDialog( context: context, builder: (_) { return AlertDialog( title: Text('Wanna Exit?'), actions: [ FlatButton( onPressed: () => Navigator.pop(context, false), // passing false child: Text('No'), ), FlatButton( onPressed: () => Navigator.pop(context, true), // passing true child: Text('Yes'), ), ], ); }).then((exit) { if (exit == null) return; if (exit) { // user pressed Yes button } else { // user pressed No button } });
quelle
Navigator.pop()
ruft eigentlich die erste Zeile auf.barrierDismissible
showDialog (), die Sie auf false oder true setzen können.Beispiel für das Schließen des Alarmdialogs beim Klicken auf eine flache Schaltfläche
RaisedButton( onPressed: () { showDialog( context: context, builder: (context) => AlertDialog( title: Text('Are you sure?'), content: Text('Do you want to remove item?'), actions: <Widget>[ FlatButton( onPressed: () => Navigator.of(context).pop(false),// We can return any object from here child: Text('NO')), FlatButton( onPressed: () => Navigator.of(context).pop(true), // We can return any object from here child: Text('YES')) ], )).then((value) => print('Selected Alert Option: ' + value.toString())); }, child: Text('Show Alert Dialog'), ),
Der obige Code enthält zwei eindeutige Elemente, die verwendet werden, um das Rückrufergebnis des Dialogs bereitzustellen
Basierend auf diesen Rückgabewerten können wir einige Operationen außerhalb davon ausführen oder den Dialogstatuswert beibehalten
quelle
Das funktioniert perfekt
RaisedButton( child: Text( "Cancel", style: TextStyle(color: Colors.white), ), color: Colors.blue, onPressed: () => Navigator.pop(context), ),
quelle
Sie können Ihren AlertDialog in eine asynchrone Methode einbinden, um die Dinge sauber zu machen.
_showAlertConfirmDelete() async { // the response will store the .pop value (it can be any object you want) var response = await showDialog( context: context, builder: (context) => AlertDialog( title: Text('Warn'), content: Text('Really wants to remove the record?'), actions: <Widget>[ FlatButton( onPressed: () => Navigator.of(context) .pop(false), child: Text('No')), FlatButton( onPressed: () => Navigator.of(context).pop(true), child: Text('Yes')) ], )); // do you want to do with the response. print(response); }
quelle
Verwenden
Navigator.pop(context);
Beispiel
showDialog( context: context, child: new AlertDialog( title: const Text("Location disabled"), content: const Text( """ Location is disabled on this device. Please enable it and try again. """), actions: [ new FlatButton( child: const Text("Ok"), onPressed: () { Navigator.pop(context); }, ), ], ), );
quelle
Navigator.of(dialogContext).pop()
Andernfalls können Sie die Seite schließen, wenn Sie von der Master- zur Detailseite navigiert sindshowDialog( context: context, builder: (dialogContext) { return Dialog( child: Column( children: [ Text("Content"), RaisedButton( onPressed: () => Navigator.of(dialogContext).pop(), child: Text("Close"), ) ], ), ); }, );
quelle
Diese Antwort funktioniert, wenn Sie den Dialog öffnen und zu einer anderen Ansicht navigieren möchten. Dieser Teil '
current_user_location
' ist die Zeichenfolge, zu der der Router wissen muss, zu welcher Ansicht er navigieren soll.FlatButton( child: Text('NO'), onPressed: () { Navigator.popAndPushNamed(context, 'current_user_location'); }, ),
quelle
Das Erstellen eines separaten Kontexts für den Warnungsdialog würde helfen.
showDialog( context: context, builder: (alertContext) => AlertDialog( title: const Text("Location disabled"), content: const Text( """Location is disabled on this device. Please enable it and try again."""), actions: [ new FlatButton( child: const Text("Ok"), onPressed: () => Navigator.pop(alertContext), ), ], ), );
quelle
Bitte verwenden Sie den folgenden Code, um den Dialog zu schließen
RaisedButton( onPressed: () { Navigator.of(context).pop();}, child: Text("Close",style: TextStyle(color: Colors.white), ), color: Colors.black, )
quelle
Übergebe es im showDialog
barrierDismissible : true
quelle
Dies funktionierte für mich Navigator.of (Kontext, rootNavigator: true) .pop ('dialog').
Navigator.pop () schließt nur die aktuelle Seite / den aktuellen Bildschirm.
quelle
In der akzeptierten Antwort wird angegeben, wie ein Dialogfeld mithilfe der Navigator-Klasse geschlossen werden soll. Um einen Dialog ohne Verwendung von Navigator zu schließen, können Sie das Ereignis onPressed der Schaltfläche auf Folgendes einstellen:
setState((){ thisAlertDialog = null; });
Falls der obige Code nicht selbsterklärend ist, wird der übergeordnete AlertDialog des FlatButton grundsätzlich auf null gesetzt und somit verworfen.
quelle