Имею следующее 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,
),
],
),
);
Как я могу сделать так, чтобы _dismissDialog()
уволить AlertDialog
?
android
ios
flutter
flutter-alertdialog
Густаш
источник
источник
onPressed: () => Navigator.pop(context),
Navigator.of(context, rootNavigator: true).pop('dialog')
работал со мной.
источник
у меня работал, но в галерее Flutter Team есть пример, использующий:
Navigator.of(context, rootNavigator: true).pop()
что тоже работает, и я хочу последовать их примеру.
источник
Если вы не хотите возвращать какой-либо результат, используйте любой из них:
Но если вы все же хотите вернуть какой-то результат, посмотрите это
Пример:
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 } });
источник
Navigator.pop()
вызывает первую строку.barrierDismissible
showDialog (), и вы можете установить для него значение false или true.Пример закрытия диалогового окна предупреждения при нажатии плоской кнопки
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'), ),
В приведенном выше коде есть две уникальные вещи, которые используются для обеспечения результата обратного вызова диалога.
На основе этого возвращаемого значения мы можем выполнить некоторую операцию вне его или сохранить значение статуса диалога.
источник
Это работает превосходно
RaisedButton( child: Text( "Cancel", style: TextStyle(color: Colors.white), ), color: Colors.blue, onPressed: () => Navigator.pop(context), ),
источник
Вы можете обернуть свой AlertDialog асинхронным методом, чтобы все было в порядке.
_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); }
источник
Использовать
Navigator.pop(context);
пример
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); }, ), ], ), );
источник
Navigator.of(dialogContext).pop()
в противном случае вы можете закрыть страницу, если вы перешли с главной на страницу сведений.showDialog( context: context, builder: (dialogContext) { return Dialog( child: Column( children: [ Text("Content"), RaisedButton( onPressed: () => Navigator.of(dialogContext).pop(), child: Text("Close"), ) ], ), ); }, );
источник
Этот ответ работает, если вы хотите открыть диалоговое окно и перейти к другому представлению. Эта часть
current_user_location
- строка, которую маршрутизатор должен знать, к какому виду перейти.FlatButton( child: Text('NO'), onPressed: () { Navigator.popAndPushNamed(context, 'current_user_location'); }, ),
источник
Помогло бы создание отдельного контекста для диалогового окна предупреждений.
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), ), ], ), );
источник
Используйте следующий код для закрытия диалогового окна
RaisedButton( onPressed: () { Navigator.of(context).pop();}, child: Text("Close",style: TextStyle(color: Colors.white), ), color: Colors.black, )
источник
передать это в showDialog
barrierDismissible : true
источник
Это сработало для меня Navigator.of (context, rootNavigator: true) .pop ('dialog').
Navigator.pop () просто закрывает текущую страницу / экран.
источник
В общем-то
Navigator.pop(context);
работает.Но если приложение имеет несколько объектов навигатора и
dialogBox
не закрывается, попробуйте этоNavigator.of(context, rootNavigator: true).pop();
Если вы хотите передать вызов результата, попробуйте
ИЛИ ЖЕ
Navigator.of(context, rootNavigator: true).pop(result)
источник
В принятом ответе указано, как закрыть диалоговое окно с помощью класса Navigator. Чтобы закрыть диалоговое окно без использования навигатора, вы можете установить для события onPressed кнопки следующее:
setState((){ thisAlertDialog = null; });
В случае, если приведенный выше код не требует пояснений, он в основном устанавливает для Parent AlertDialog FlatButton значение null, таким образом отклоняя его.
источник