Как я могу исправить список RadioListTile во флаттере? - PullRequest
1 голос
/ 20 марта 2020

У меня есть такой список. List itemList = [IdText (1, 'hello'), IdText (2, 'hallo'), IdText (3, 'ciao')]; и я хочу сделать радиолистиль; Я показываю текст и сохраняю идентификаторы на карте. Но у меня есть ошибка (выбранная кнопка не окрашена), Как я могу это исправить? вот мой код ниже:

             for(IdText list in itemList)
                 RadioListTile(
                   title: Text(list.text),
                   groupValue: _map[item.fieldName],
                   onChanged: (value) {
                     setState(() {
                       _map[item.fieldName]  = value.id;
                     });
                     print(_map[item.fieldName] );
                   },
                   value: list,
                 ), 

1 Ответ

1 голос
/ 21 марта 2020

Вы можете создать customRadioGroup, которая будет принимать ваши элементы и обрабатывать изменения.


class CustomRadioGroup extends StatefulWidget {
  final Function(IdText) onValueSelected;
  final List<IdText> items;
  const CustomRadioGroup({Key key, @required this.onValueSelected,this.items})
      : super(key: key);

  @override
  _CustomRadioGroupState createState() => _CustomRadioGroupState();
}

class _CustomRadioGroupState extends State<CustomRadioGroup> {

  var selectedValue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Container(
          child: ListView.builder(
              itemCount: widget.items.length,
              itemBuilder: (context, position) {
                return RadioListTile(
                    title: Text(widget.items[position].text),
                    groupValue: selectedValue,
                    onChanged: (value) {
                      setState(() {
                        selectedValue = value;
                      });
                      widget.onValueSelected(widget.items.firstWhere((element) => element.id==value));
                    },
                    value: widget.items[position].id);
              }),
        ));
  }
}

Передавать функцию обратного вызова onValueSelected, которая срабатывает каждый раз, когда изменяется выбор радиокнопки.

class MyApp extends StatelessWidget {
  final List<IdText> items =  [ IdText(1,'hello'), IdText(2,'hallo'), IdText(3,'ciao') ];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(accentColor: Colors.blue),
      home: CustomRadioGroup(onValueSelected: onValueSelected, items: items),
    );
  }

  onValueSelected(value) {
    print(value);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...