반응형
질문
현재, AlertDialog
에 IconButton
이 있습니다. 사용자는 IconButton을 클릭할 수 있으며, 클릭할 때마다 두 가지 색상이 있습니다. 문제는 AlertDialog를 닫고 다시 열어야 색상 아이콘의 상태 변경을 볼 수 있다는 것입니다. 사용자가 클릭할 때 즉시 IconButton 색상을 변경하려고 합니다.
다음은 코드입니다:
bool pressphone = false;
//....
new IconButton(
icon: new Icon(Icons.phone),
color: pressphone ? Colors.grey : Colors.green,
onPressed: () => setState(() => pressphone = !pressphone),
),
답변
StatefulBuilder를 사용하여 Dialog 내부에서 setState를 사용하고 해당 내부 위젯만 업데이트합니다.
showDialog(
context: context,
builder: (context) {
String contentText = "대화 상자 내용";
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text("대화 상자 제목"),
content: Text(contentText),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context),
child: Text("취소"),
),
TextButton(
onPressed: () {
setState(() {
contentText = "변경된 대화 상자 내용";
});
},
child: Text("변경"),
),
],
);
},
);
},
);
반응형
댓글