我正在制作单选按钮列表。但是无法找到一种映射它们的方法。当前的方法一一制作太多,并带有10多个单选按钮,这占用数百行代码。

enum SingingCharacter {char1, char2, char3, char4}
class _HomeScreenState extends State<HomeScreen> {
  SingingCharacter _character = SingingCharacter.char1;

  final List myList= ['One','Two','Thre' ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Home'),
        ),
        body: Container(
          child: Column(children: <Widget>[
            RadioListTile<SingingCharacter>(
              title: Text('${myList[0]}'),
              value: SingingCharacter.char1,
              groupValue: _character,
              onChanged: (SingingCharacter value) {
                setState(() {
                  _character = value;
                });
              },
            ),
            RadioListTile<SingingCharacter>(
              title: Text('${myList[1]}'),
              value: SingingCharacter.char2,
              groupValue: _character,
              onChanged: (SingingCharacter value) {
                setState(() {
                  _character = value;
                });
              },
            )
            ....
          ]),
        ));
  }
}

有什么方法可以循环播放并显示在 child 中吗?
谢谢

最佳答案

您可以将List更改为Map,然后使用它来将枚举值映射到Widget。像这样(免责声明:代码未经测试,但是应该可以这样):

enum SingingCharacter {char1, char2, char3}

class _HomeScreenState extends State<HomeScreen> {
  SingingCharacter _character = SingingCharacter.char1;

  final Map<SingingCharacter, String> radioMap = {SingingCharacter.char1: 'One', SingingCharacter.char2: 'Two', SingingCharacter.char3: 'Three'};

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Container(
        child: Column(
          children: _generateRadioButtons()
        ),
      )
    );
  }

  List<Widget> _generateRadioButtons() {
    return SingingCharacter.values.map((char) {
      return RadioListTile<SingingCharacter>(
        title: Text('${radioMap[char]}'),
        value: char
        groupValue: _character,
        onChanged: (SingingCharacter value) {
          setState(() {
            _character = value;
          });
        },
      );
    }).toList();
  }
}

10-07 12:43
查看更多