list - 实现 list 的更快方法?

标签 list flutter dart radiobuttonlist

我正在制作单选按钮列表。但是无法找到一种映射它们的方法。当前的方法一一制作太多,并带有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();
  }
}

关于list - 实现 list 的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61825807/

相关文章:

c# - 从初始化器创建列表

android - 如何使 ListView (已创建)可点击(Android)?

python - 用新输入替换文件中的数据

C# 根据多个条件过滤列表中的项目

Flutter:我的 Listview.builder 在固定底部容器下消失

image - flutter 图像压缩

flutter - 如何打造浏览量重叠效果?

ios - 有一个 Cupertino 导航来显示应用程序栏,但需要有结束抽屉

flutter - 如何限制 flutter 中的两个点?

dart - 是否可以通过名称获取类镜像?