Mam następujące 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,
),
],
),
);
Jak mogę zrobić _dismissDialog()
zwolnienie powiedział AlertDialog
?
android
ios
flutter
flutter-alertdialog
Gustash
źródło
źródło
onPressed: () => Navigator.pop(context),
Navigator.of(context, rootNavigator: true).pop('dialog')
pracował ze mną.
źródło
działało dla mnie, ale galeria Flutter Team zawiera przykład wykorzystujący:
Navigator.of(context, rootNavigator: true).pop()
które również działają i kusi mnie, by pójść za ich przykładem.
źródło
Jeśli nie chcesz zwracać żadnego wyniku, użyj jednego z nich:
Ale jeśli chcesz zwrócić jakiś wynik, zobacz to
Przykład:
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 } });
źródło
Navigator.pop()
wywołuje pierwszą linię.barrierDismissible
showDialog (), którą można ustawić na wartość false lub true.Przykład odrzucania okna ostrzeżenia po kliknięciu płaskiego przycisku
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'), ),
Powyższy kod ma dwie unikalne rzeczy, które są używane do dostarczania wyniku wywołania zwrotnego w oknie dialogowym
Na podstawie tych zwracanych wartości możemy wykonać pewne operacje poza nim lub zachować wartość statusu dialogu
źródło
To działa doskonale
RaisedButton( child: Text( "Cancel", style: TextStyle(color: Colors.white), ), color: Colors.blue, onPressed: () => Navigator.pop(context), ),
źródło
Możesz zawinąć swój AlertDialog w metodę asynchroniczną, aby wszystko było czyste.
_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); }
źródło
Posługiwać się
Navigator.pop(context);
Przykład
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); }, ), ], ), );
źródło
Navigator.of(dialogContext).pop()
w przeciwnym razie możesz zamknąć stronę, jeśli przechodzisz ze strony głównej do strony szczegółówshowDialog( context: context, builder: (dialogContext) { return Dialog( child: Column( children: [ Text("Content"), RaisedButton( onPressed: () => Navigator.of(dialogContext).pop(), child: Text("Close"), ) ], ), ); }, );
źródło
Ta odpowiedź działa, jeśli chcesz otworzyć okno dialogowe i przejść do innego widoku. Ta część „
current_user_location
” jest ciągiem, do którego router musi wiedzieć, do którego widoku ma przejść.FlatButton( child: Text('NO'), onPressed: () { Navigator.popAndPushNamed(context, 'current_user_location'); }, ),
źródło
Pomogłoby utworzenie oddzielnego kontekstu dla okna dialogowego alertów.
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), ), ], ), );
źródło
Użyj poniższego kodu, aby zamknąć okno dialogowe
RaisedButton( onPressed: () { Navigator.of(context).pop();}, child: Text("Close",style: TextStyle(color: Colors.white), ), color: Colors.black, )
źródło
przekazać go w showDialog
barrierDismissible : true
źródło
To zadziałało dla mnie Navigator.of (context, rootNavigator: true) .pop ('dialog').
Navigator.pop () po prostu zamyka bieżącą stronę / ekran.
źródło
Ogólnie
Navigator.pop(context);
działa.Ale jeśli aplikacja ma wiele obiektów Navigatora i
dialogBox
nie zamyka się, spróbuj tegoNavigator.of(context, rootNavigator: true).pop();
Jeśli chcesz przekazać wynik, spróbuj
LUB
Navigator.of(context, rootNavigator: true).pop(result)
źródło
Zaakceptowana odpowiedź określa, jak zamknąć okno dialogowe za pomocą klasy Navigator. Aby zamknąć okno dialogowe bez używania Nawigatora, możesz ustawić zdarzenie onPressed przycisku na:
setState((){ thisAlertDialog = null; });
W przypadku, gdy powyższy kod nie jest oczywisty, w zasadzie ustawia Parent AlertDialog FlatButton na wartość null, a tym samym go odrzuca.
źródło