👉 쉽게 말하면
“사용자에게 물어보는 창”
👉 핵심 함수:
showDialog(
context: context,
builder: (context) {
return AlertDialog(...);
},
);
ElevatedButton(
onPressed: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text("알림"),
content: const Text("정말 삭제하시겠습니까?"),
actions: [
TextButton(
onPressed: () {
Navigator.pop(context); // 닫기
},
child: const Text("취소"),
),
ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text("확인"),
),
],
);
},
);
},
child: const Text("다이얼로그 열기"),
)
| 항목 | 설명 |
|---|---|
| title | 제목 |
| content | 내용 |
| actions | 버튼 영역 |
Navigator.pop(context);
👉 다이얼로그 닫기
ElevatedButton(
onPressed: () async { // 👈 async 필수
final result = await showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text("선택"),
content: const Text("어떤 걸 선택할까요?"),
actions: [
TextButton(
onPressed: () => Navigator.pop(context, "A"),
child: const Text("A"),
),
TextButton(
onPressed: () => Navigator.pop(context, "B"),
child: const Text("B"),
),
],
);
},
);
print("결과: $result");
if (result == "A") {
print("A 선택됨");
} else if (result == "B") {
print("B 선택됨");
}
},
child: const Text("다이얼로그 열기"),
)
👉 선택 결과 받기 가능
showDialog(
context: context,
builder: (context) {
return SimpleDialog(
title: const Text("옵션 선택"),
children: [
SimpleDialogOption(
onPressed: () => Navigator.pop(context, "A"),
child: const Text("옵션 A"),
),
SimpleDialogOption(
onPressed: () => Navigator.pop(context, "B"),
child: const Text("옵션 B"),
),
],
);
},
);
showDialog(
context: context,
builder: (context) {
return Dialog(
child: Container(
padding: const EdgeInsets.all(20),
child: const Text("커스텀 다이얼로그"),
),
);
},
);
| 종류 | 설명 |
|---|---|
| AlertDialog | 일반 알림 |
| SimpleDialog | 선택 목록 |
| Dialog | 완전 커스텀 |
👉 build context 사용해야 함
👉 다이얼로그 안 닫힘
👉 showDialog + AlertDialog = 기본 다이얼로그