首页 > 解决方案 > 如何在颤动中修复 RadioListTile 列表?

问题描述

我有一个这样的列表 List itemList = [ IdText(1,'hello'), IdText(2,'hallo'), IdText(3,'ciao') ]; 我想做一个radilisttile;我显示文本并将 ID 保存在地图中。但我有一个错误(所选按钮未着色),我该如何解决这个问题?这是我的代码如下:

             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,
                 ), 

标签: flutterradio-button

解决方案


您可以构建一个 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);
  }
}

推荐阅读