You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:09:25