Используйте динамическую функцию для построения списка переключателей, используя перечисление в качестве значения - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь создать списки переключателей с функцией. Это много разных списков, использующих разные типы перечислений.

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

List<Widget> _buildRadioButtonList(List<dynamic> values, groupValue) {
  List<Widget> radioButtons = [];
  for (var value in values) {
    radioButtons.add(
      RadioListTile<dynamic>(
        title: Text(GF.enumToString(value)),
        value: value,
        groupValue: groupValue,
        onChanged: (value) {
          setRadio(value, groupValue);
          setState(() {
            groupValue = value;
          });
        },
        selected: groupValue == value,
      ),
    );
  }

  return radioButtons;
}

Так используется функция

enum IsFinished { Positive, Negative, Unknown }

IsFinished _isFinishedGroupValue = isFinished.unknown;

Widget build(BuildContext context) { 

return Column(
  children: _buildRadioButtonList(IsFinished.values, _isFinishedGroupValue)

}

ПРИМЕЧАНИЕ GF.enumToString(value) просто получаетстрока из перечисления для использования в качестве метки

static String enumToString(value) {
  return value.toString().split('.').last;
} 

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

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