【问题标题】: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。因此,您需要存储具有类别和值的父小部件。

标签: flutter dart key state


【解决方案1】:

您不能使用全局键来保留所有响应的状态。您应该使用类(工厂)来保存您的响应并使用状态管理库来处理您的响应,提供者可能会很好地工作。或者,您可以使用像 hive 这样的本地数据库来存储您的响应,并且您可以随时获取这些响应,这将是最佳实践。 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2016-06-19
    • 2016-12-21
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多