如何将Dart枚举转换为List<String>并在ListView中展示
实现方案
Dart的枚举类自带values静态常量,可以直接拿到枚举定义的所有值的有序列表,把这个列表作为ListView的数据源就能实现需求,具体实现如下:
核心实现逻辑
- 调用
TableType.values获取所有枚举项,返回结果顺序和枚举里定义值的顺序完全一致,对应示例枚举会返回[TableType.circle, TableType.square, TableType.rectangle] - 枚举项默认的
toString()方法会返回枚举类名.值名的格式,Dart 2.15+版本可以直接用枚举的name属性拿到短名(比如TableType.circle.name直接返回circle),如果需要展示自定义友好文案,写个映射方法做转换即可 - 列表渲染优先用
ListView.builder,性能比直接生成children列表更好,枚举项数量极少时也可以直接用ListView默认构造函数
完整可运行示例代码
import 'package:flutter/material.dart'; // 已有的枚举定义 enum TableType { circle, square, rectangle } class TableTypeListPage extends StatelessWidget { const TableTypeListPage({super.key}); // 枚举值转展示文案的辅助方法 String _getDisplayName(TableType type) { switch (type) { case TableType.circle: return '圆形餐桌'; case TableType.square: return '正方形餐桌'; case TableType.rectangle: return '长方形餐桌'; } } @override Widget build(BuildContext context) { final allTableTypes = TableType.values; return Scaffold( appBar: AppBar(title: const Text('餐桌类型选择')), body: ListView.builder( itemCount: allTableTypes.length, itemBuilder: (context, index) { final item = allTableTypes[index]; return ListTile( title: Text(_getDisplayName(item)), onTap: () { // 点击时可以直接拿到对应的枚举值处理业务逻辑 debugPrint('选中类型:${item.name}'); }, ); }, ), ); } }
如果不需要自定义中文文案,也可以直接用
Text(item.name)展示枚举短名,不用额外写映射方法。
内容的提问来源于stack exchange,提问作者kartheeki j
相关产品推荐
相关产品推荐

