Реализовать логику радио / флажков для пользовательских виджетов - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу создать два виджета.Оба отображают сетку из 2 столбцов с кнопками, которые можно выбрать / отменить выбор.У одного должна быть ради логика (одиночный выбор), где у другого должна быть логика флажка (множественный выбор).

Это моя реализация для Android, которую я пытаюсь воссоздать во Flutter:

image

Я попытался использовать GridView с RadioListTiles, подумав, что я мог бы заменить значок RadioButton своим собственным виджетом, сохранив логику.Я не вижу никакого способа сделать это.Я также понял, что GridView во Flutter не выполняет автоматическую обертку для своих дочерних элементов, в результате чего каждая радиоплитка занимает только первые 10% всей ячейки.

Вот где я сейчас:

class RadioSelect extends StatefulWidget {
    final QuestionData question;

    RadioSelect({this.question});

    @override
    RadioSelectState createState() => RadioSelectState(question);
}

class RadioSelectState extends State<RadioSelect> {
  RadioSelectState(this._question);

  final QuestionData _question;
  final SliverGridDelegate delegate = 
    SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2);
  int _selectedIndex;

  @override
  Widget build(BuildContext context) {
    return GridView.builder(
      gridDelegate: delegate,
      padding: EdgeInsets.all(0),
      itemCount: _question.selectOptions.length,
      itemBuilder: (context, index) {
        return RadioListTile(
          groupValue: _selectedIndex,
          title: Text(_question.selectOptions[index]),
          value: index,
          onChanged: (newIndex) {
           setState(() {
              _selectedIndex = newIndex;
            });
          },
        );
      },
    );
  }
}

В результате:

enter image description here

Я хочу следовать как можно более «флаттерным» способом.Как ты считаешь, моя лучшая причина для действий?

...