StatefulBuilder
和 StatefulWidget
有什么区别?什么时候应该使用其中一种而不是另一种?StatefulBuilder
定义为:
一个柏拉图式的小部件,既具有状态又调用闭包来获取其子小部件
当
StatefulBuilder
被定义时:
具有可变状态的小部件
StatefulBuilder
实际上是引擎盖下的StatefulWidget
。StatefulBuilder
是StatefulWidget
的具体实现。
因此,每当我们想要创建具有内部状态的自定义 Widget 时,我们都会扩展
StatefulWidget
。
当我们想要在另一个 Widget 的 StatefulBuilder
方法中公开 setState
的 StatefulBuilder
时,我们会在非常特定的情况下使用 build
。
在下面的示例中,我们使用
StatefulBuilder
来重建包含 4 个 Column
小部件的 Radio
:
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);
},
);
}),
);
},
),
);
},
);