Flutter: использование радиокнопок

Обычно радиокнопки во Flutter обертываю виджетом ListTile. Однако в этом случае получаются слишком большие отступы между кнопками, которые обычными средствами не убираются. В моем варианте, кнопки размещаются просто в Row строке:

enum ChangingTime {t30a,t30,t60,t90,t120,t150,t180}
...
ChangingTime? _chtime = ChangingTime.t30a;
...
Container RadioLine(String title,ChangingTime rvalue){
    return
    Container(
      padding: const EdgeInsets.only(bottom: 0,left: 0,right: 0,top: 0),
      height: 20,
      child:
        Row(
          children: [
            Expanded(
                child: Padding(
                  padding: const EdgeInsets.only(bottom: 0,left: 8,right: 8,top: 0),
                  child: Text(title),
                )
            ),
            Radio<ChangingTime>(
              value: rvalue,
              groupValue: _chtime,
              onChanged: (ChangingTime? value) {
                setState(() {
                  _chtime = value;
                  print(value);
                });
              },
            ),
          ],
        )
      );
  }
...
...
RadioLine("30 минут с автопродлением",ChangingTime.t30a),
new Divider(),
RadioLine("30 минут",ChangingTime.t30),
new Divider(),
RadioLine("1 час",ChangingTime.t60),

Получается вполне приемлимое:

Одно но. В таком случае выбор кнопки будет только по щелчку по переключателю, а не по тексту. Как вариант можно попробовать RadioListTile, но с ним отступы до желаемого минимума мне убрать не удалось.

 RadioListTile RadioLine2(String title,ChangingTime rvalue){
    return
      RadioListTile<ChangingTime>(
        title:Text(
            title,
        ),
        dense: true,
        value: rvalue,
        groupValue: _chtime,
        visualDensity: VisualDensity(
          horizontal: VisualDensity.minimumDensity,
          vertical: VisualDensity.minimumDensity,
        ),
        controlAffinity: ListTileControlAffinity.trailing,
        onChanged: (ChangingTime? value) {
            setState(() {
                _chtime = value;
                print(value);
            });
        },
      );
  }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.