FlatButton 클릭 시 AlertDialog를 해제하는 방법은 무엇입니까?
나는 다음을 가지고 있습니다.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
?
Navigator.pop()
그 묘기를 부려야 합니다.이를 사용하여 대화 상자의 결과를 반환할 수도 있습니다(사용자에게 선택사항이 표시된 경우).
Navigator.of(context, rootNavigator: true).pop('dialog')
저와 함께 일했습니다.
Navigator.pop(_)
Floating Team의 갤러리에는 다음을 사용하는 예제가 포함되어 있습니다.
Navigator.of(context, rootNavigator: true).pop()
그것도 효과가 있고, 저는 그들의 선례를 따르고 싶습니다.
결과를 반환하지 않으려면 다음 중 하나를 사용합니다.
Navigator.of(context).pop();
Navigator.pop(context);
그러나 결과를 반환하려면 이 항목을 참조하십시오.
예:
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(context);
작동하다.
그러나 응용프로그램에 여러 Navigator 개체가 있는 경우dialogBox
닫히지 않습니다, 그럼 이것을 시도해 보세요.
Navigator.of(context, rootNavigator: true).pop();
결과 호출을 통과하려면 시도하십시오.
Navigator.pop(context,result);
OR
Navigator.of(context, rootNavigator: true).pop(result);
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"),
)
],
),
);
},
);
플랫 버튼 클릭 시 경고 대화 상자 해제 예제
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'),
),
위 코드에는 대화 상자의 콜백 결과를 제공하는 데 사용되는 두 가지 고유한 것이 있습니다.
네비게이터.of(컨텍스트).pop(false) - Navigator.of(context)를 누를 때 잘못된 값을 반환합니다.pop(true) - YES를 눌렀을 때 true 값을 반환합니다.
이러한 반환 값을 기반으로 외부에서 일부 작업을 수행하거나 대화 상자 상태 값을 유지할 수 있습니다.
현재 작동합니다.
RaisedButton(
child: Text(
"Cancel",
style: TextStyle(color: Colors.white),
),
color: Colors.blue,
onPressed: () => Navigator.pop(context),
),
효과가 있었습니다.for me Navigator.of(context, rootNavigator: true).pop('dialog')
.
Navigator.pop()
현재 페이지/화면을 닫습니다.
알림 대화 상자에 대한 별도의 컨텍스트를 만드는 것이 도움이 됩니다.
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,
)
사용하다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);
},
),
],
),
);
이 대답은 대화 상자를 열고 다른 보기로 이동하려는 경우에 사용할 수 있습니다.이 부분'current_user_location
라우터가 탐색할 뷰를 알아야 하는 문자열입니다.
FlatButton(
child: Text('NO'),
onPressed: () {
Navigator.popAndPushNamed(context, 'current_user_location');
},
),
이 정도면 대화 상자를 해제할 수 있습니다. 내부에 추가합니다. 다음과 같은 콜백.
급지, 급지, 급지, 급지, 급지, 급지.
Navigator.of(context).pop();
AlertDialog(
title: Center(child: Text("$title")),
insetPadding: EdgeInsets.zero,
titlePadding: EdgeInsets.only(top: 14.0, bottom: 4),
content: Container(
height: 50,
child: TextFormField(
controller: find_controller,
decoration: InputDecoration(
suffixIcon: context.watch<MediaProvider>().isChangeDialog
? IconButton(
onPressed: () {
clearController(find_controller);
},
icon: Icon(Icons.clear))
: null,
border: OutlineInputBorder(
borderSide: BorderSide(color: Colors.deepPurpleAccent)),
hintText: 'Id',
),
onChanged: (val) {
if (val.isNotEmpty)
context.read<MediaProvider>().isChangeDialog = true;
else
context.read<MediaProvider>().isChangeDialog = false;
},
),
),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(4.0),
child: OutlinedButton(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
child: Icon(Icons.clear),
),
),
Text("Cancel")
],
),
onPressed: () {
context.read<MediaProvider>().isChangeDialog = false;
//========================this enough to dismisss dialog
Navigator.of(context).pop();
}),
),
Padding(
padding: const EdgeInsets.all(4.0),
child: ElevatedButton(
onPressed: context.watch<MediaProvider>().isChangeDialog
? () {
context.read<MediaProvider>().isChangeDialog = false;
okCallback;
}
: null,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Align(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
child: Icon(Icons.check),
),
),
Text("OK")
],
)),
)
],
),
],
);
닫기 대화 상자용
void cancelClick() {
Navigator.pop(context);
}
showDialog에 전달barrierDismissible : true
get package를 사용합니다.그런 다음 Get.back()을 클릭하여 Modal을 닫습니다.
허용된 답변에는 네비게이터 클래스를 사용하여 대화상자를 해제하는 방법이 나와 있습니다.Navigator를 사용하지 않고 대화상자를 닫으려면 버튼의 onPressed 이벤트를 다음과 같이 설정할 수 있습니다.
setState((){
thisAlertDialog = null;
});
위의 코드가 설명할 수 없는 경우 기본적으로 FlatButton의 Parent AlertDialog를 null로 설정하여 해제합니다.
언급URL : https://stackoverflow.com/questions/44159819/how-to-dismiss-an-alertdialog-on-a-flatbutton-click
'source' 카테고리의 다른 글
JavaScript 문서입니다.AJAX를 사용할 경우 Write가 모든 본문 컨텐츠를 대체합니다. (0) | 2023.07.24 |
---|---|
Oracle: 하나의 필드를 업데이트하는 동안 행 복사 (0) | 2023.07.24 |
선택을 사용하여 쿼리 결과에 행 추가 (0) | 2023.07.19 |
플라스크에서 글로벌 변수는 스레드 세이프입니까?요청 간에 데이터를 공유하려면 어떻게 해야 합니까? (0) | 2023.07.19 |
python에서 base 2에 로그인합니다. (0) | 2023.07.19 |