Tengo lo siguiente 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,
),
],
),
);
¿Cómo puedo hacer que se _dismissDialog()
despida dicho AlertDialog
?
android
ios
flutter
flutter-alertdialog
Gustash
fuente
fuente
onPressed: () => Navigator.pop(context),
Navigator.of(context, rootNavigator: true).pop('dialog')
trabajó conmigo.
fuente
funcionó para mí, pero la galería del equipo Flutter contiene un ejemplo que usa:
Navigator.of(context, rootNavigator: true).pop()
que también funciona, y me siento tentado a seguir su ejemplo.
fuente
Si no desea devolver ningún resultado, use cualquiera de ellos:
Pero si desea devolver algún resultado, consulte este
Ejemplo:
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 } });
fuente
Navigator.pop()
llama a la primera línea.barrierDismissible
de showDialog () y puede establecerla en falso o verdadero.Ejemplo de cierre de diálogo de alerta al hacer clic en un botón plano
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'), ),
El código anterior tiene dos cosas únicas que se utilizan para proporcionar el resultado de devolución de llamada del diálogo
Según estos valores de retorno, podemos realizar alguna operación fuera de él o mantener el valor de estado del diálogo
fuente
Esto funciona perfectamente
RaisedButton( child: Text( "Cancel", style: TextStyle(color: Colors.white), ), color: Colors.blue, onPressed: () => Navigator.pop(context), ),
fuente
Puede envolver su AlertDialog en un método asincrónico para limpiar las cosas.
_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); }
fuente
Utilizar
Navigator.pop(context);
Ejemplo
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); }, ), ], ), );
fuente
Navigator.of(dialogContext).pop()
de lo contrario, puede cerrar la página si navegó desde la página principal a la página de detallesshowDialog( context: context, builder: (dialogContext) { return Dialog( child: Column( children: [ Text("Content"), RaisedButton( onPressed: () => Navigator.of(dialogContext).pop(), child: Text("Close"), ) ], ), ); }, );
fuente
Esta respuesta funciona si desea abrir el cuadro de diálogo y navegar a otra vista. Esta parte '
current_user_location
' es la cadena que el enrutador necesita saber a qué vista navegar.FlatButton( child: Text('NO'), onPressed: () { Navigator.popAndPushNamed(context, 'current_user_location'); }, ),
fuente
Sería útil crear un contexto separado para Alert Dialog.
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), ), ], ), );
fuente
Utilice lo siguiente para el código para cerrar el diálogo
RaisedButton( onPressed: () { Navigator.of(context).pop();}, child: Text("Close",style: TextStyle(color: Colors.white), ), color: Colors.black, )
fuente
pásalo en el showDialog
barrierDismissible : true
fuente
Esto funcionó para mí Navigator.of (context, rootNavigator: true) .pop ('dialog').
Navigator.pop () simplemente cierra la página / pantalla actual.
fuente
La respuesta aceptada indica cómo descartar un diálogo usando la clase Navigator. Para cerrar un cuadro de diálogo sin usar el navegador, puede configurar el evento onPressed del botón en lo siguiente:
setState((){ thisAlertDialog = null; });
En caso de que el código anterior no se explique por sí mismo, básicamente está configurando el Parent AlertDialog del FlatButton en nulo, descartándolo.
fuente