В моем приложении есть несколько флажков, и я хочу, чтобы, когда пользователь устанавливает флажок, другие флажки не отмечаются. Обычно это совсем не сложно, но проблема в том, что у меня есть логическое значение и заголовок флажка на карте. Как я могу снять все флажки, кроме того, который установлен пользователем?

Это карта:

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(),
  ),
1
SOS video 14 Ноя 2020 в 15:01

2 ответа

Лучший ответ

Вам нужен не флажок, а переключатель . Вы можете выбрать только один переключатель за раз, и вам не нужно вручную проверять состояние. Однако, если вы настаиваете на флажках, вы можете перебирать карту

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

Если вы установите значение false, вы просто измените копию значения. Вы можете отказаться от карты и выбрать одну переменную int selectedBox.

1
FrontMobe 14 Ноя 2020 в 12:10

Флажок предназначен для выбора нескольких групп пользователей. Другими словами, если вы хотите отменить выбор, когда пользователь выбирает другой вариант, тогда

Переключатель

Будет лучшим вариантом.

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

1
Steven Ogwal 14 Ноя 2020 в 12:15