StatefulBuilder
在 AlertDialog的content
部分中使用 a 。甚至StatefulBuilder 文档实际上也有一个带有对话框的示例。
它的作用是为您提供一个新的context和setState函数,以便在需要时进行重建。
示例代码:
showDialog(
context: context,
builder: (BuildContext context) {
int selectedRadio = 0; // Declare your variable outside the builder
return AlertDialog(
content: StatefulBuilder( // You need this, notice the parameters below:
builder: (BuildContext context, StateSetter setState) {
return Column( // Then, the content of your dialog.
mainAxisSize: MainAxisSize.min,
children: List<Widget>.generate(4, (int index) {
return Radio<int>(
value: index,
groupValue: selectedRadio,
onChanged: (int value) {
// Whenever you need, call setState on your variable
setState(() => selectedRadio = value);
},
);
}),
);
},
),
);
},
);
正如我所提到的,这就是showDialog 文档中所说的:
[...] 构建器返回的小部件与最初调用 showDialog 的位置不共享上下文。如果对话框需要动态更新,请使用 StatefulBuilder 或自定义 StatefulWidget。