当用户选中另一个复选框时取消选中一个复选框(复选框的布尔值在地图中)

Uncheck a checkbox when user checking another one (bool of checkbox is in a map)

我的应用程序中有几个复选框,我希望当用户选中一个复选框时,其他复选框未选中。这通常一点也不难,但问题是我在地图中有 bool 和复选框的标题。如何取消选中除用户选中的复选框以外的所有复选框?

这是地图:

Map<String, bool> filterOptions = {
  'Test1': false,
  'Test2': false,
};

这是我“构建”复选框的代码:

ListView(
    scrollDirection: Axis.vertical,
    shrinkWrap: true,
    children: filterOptions.keys.map((String key) {
      return CheckboxListTile(
        title: Text(key),
        value: filterOptions[key],
        onChanged: (bool value) {
          setState(() {
            filterOptions[key] = value;
          });
        },
      );
    }).toList(),
  ),

您要查找的不是复选框,而是 Radio Button。您一次只能 select 一个单选按钮,您不必手动检查状态。但是,如果您坚持使用复选框,则可以遍历地图

filterOptions.forEach((key, value) => filterOptions[key] = false);

如果将值设置为 false,则只会更改值的副本。您可以考虑放弃地图并选择单个 int selectedBox 变量。

复选框的用途是用于多个用户组选择。 换句话说,如果你想在用户选择另一个选项时取消选择,那么

RadioButton

将是最佳选择。

SingingCharacter _character = SingingCharacter.lafayette;


Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        ListTile(
          title: const Text('Male'),
          leading: Radio(
            value: SingingCharacter.lafayette,
            groupValue: _character,
            onChanged: (SingingCharacter value) {
              setState(() {
                _character = value;
              });
            },
          ),
        ),
        ListTile(
          title: const Text('Female'),
          leading: Radio(
            value: SingingCharacter.jefferson,
            groupValue: _character,
            onChanged: (SingingCharacter value) {
              setState(() {
                _character = value;
              });
            },
          ),
        ),
      ],
    );
  }

截图

来源:Flutter RadioButton