當警報對話框中發生某些事情時,我試圖動態更新警報對話框的操作串列。本質上,默認情況下對話框有一個“取消”操作按鈕。但是一旦用戶在對話框中做了一些事情,我希望它有一個“取消”和一個“接受”按鈕。我試過使用 a StatefulBuilder,這就是我如何讓對話框的其余部分更新狀態。但是,它不適用于操作按鈕。
我已經嘗試有條件地呈現按鈕,以及生成用于對話框操作setState的串列,并在操作發生時使用添加到串列中。兩者都不起作用,盡管對話框內容中的其他狀態更新與StatefulBuilder. 對話框打開時僅包含“取消”操作,并且不會更新以包含“接受”操作。
await showDialog<void>(
context: context,
builder: (BuildContext context) {
int? selectedRadio = 0;
return AlertDialog(
content: StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return Column(
mainAxisSize: MainAxisSize.min,
children: List<Widget>.generate(4, (int index) {
return Radio<int>(
value: index,
groupValue: selectedRadio,
onChanged: (int? value) {
setState(() => selectedRadio = value);
},
);
}),
actions: <Widget>[
TextButton(
child: Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
},
),
selectedRadio == 1 ? TextButton(
child: Text('Accept'),
onPressed: () {
Navigator.of(context).pop();
},
) : SizedBox.Shrink(),
],
);
},
),
);
},
);
uj5u.com熱心網友回復:
嘗試將 AlertDialog 放在 StatefulBuilder 中
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
uj5u.com熱心網友回復:
創建一個StatefulWidget以顯示您的AlertDialog,并selectedRadio在那里進行管理。還可以利用 Dartcollection if來處理條件按鈕:
class MyDialog extends StatefulWidget {
const MyDialog({Key? key}) : super(key: key);
@override
State<MyDialog> createState() => _MyDialogState();
}
class _MyDialogState extends State<MyDialog> {
int selectedRadio = 0;
@override
Widget build(BuildContext context) {
return AlertDialog(
actions: <Widget>[
TextButton(
child: Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
},
),
if (selectedRadio == 1)
TextButton(
child: Text('Accept'),
onPressed: () {
Navigator.of(context).pop();
},
)
],
content: Column(
mainAxisSize: MainAxisSize.min,
children: List<Widget>.generate(4, (int index) {
return Radio<int>(
value: index,
groupValue: selectedRadio,
onChanged: (int? value) {
setState(() => selectedRadio = value!);
},
);
}),
));
}
}
在此之后,您可以像這樣顯示對話框:
TextButton(
child: Text('Pressme'),
onPressed: () async => await showDialog<void>(
context: context,
builder: (BuildContext context) {
return const MyDialog();
},
))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/377565.html
