【发布时间】:2022-01-17 12:08:57
【问题描述】:
我在 dart 中制作了一个自定义复选框小部件,并使用全局键来保存状态。
class CheckBox extends StatefulWidget {
final String label;
final void Function(dynamic) onChanged;
const CheckBox({required this.label, required this.onChanged, Key? key})
: super(key: key);
@override
CheckBoxState createState() => CheckBoxState();
}
class CheckBoxState extends State<CheckBox> {
final key = GlobalKey();
late bool isChecked;
@override
void initState() {
isChecked=false;
super.initState();
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(widget.label, style: Theme.of(context).textTheme.headline4),
KeyedSubtree(
key: key,
child: Checkbox(
activeColor: LightSeaGreen,
checkColor: White,
value: isChecked,
onChanged: (value) {
setState(() {
isChecked = !isChecked;
});
widget.onChanged(value);
},
),
),
],
),
);
}
}
当我选中一个类别(即证书提供者)中的复选框并选中课程语言类别中的复选框时,证书提供者的选中复选框保持未选中状态(状态未保存)。当我从一个类别转到另一个类别时,我可以做些什么来保存状态?任何形式的帮助将不胜感激。
【问题讨论】:
-
当您更改类别时,会构建您的“CheckBox”小部件并调用“initState”并将值重置为 false。因此,您需要存储具有类别和值的父小部件。