复选框状态未保留
Posted
技术标签:
【中文标题】复选框状态未保留【英文标题】:Checkbox state not preserved 【发布时间】: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。因此,您需要存储具有类别和值的父小部件。 【参考方案1】:您不能使用全局键来保留所有响应的状态。您应该使用类(工厂)来保存您的响应并使用状态管理库来处理您的响应,提供者可能会很好地工作。或者,您可以使用像 hive 这样的本地数据库来存储您的响应,并且您可以随时获取这些响应,这将是最佳实践。 谢谢
【讨论】:
以上是关于复选框状态未保留的主要内容,如果未能解决你的问题,请参考以下文章
使用复选框导出 VueJS 呈现的 HTML 无法保留选中状态