Flutter如何格式化API返回文本:将Name.MAGIC转为Magic
解决Flutter枚举值转友好展示文本的问题
针对你需要把Name.MAGIC转换为Magic展示的需求,这里有几种实用的方案:
方案1:直接字符串处理函数
利用枚举的name属性(直接返回枚举常量名,如MAGIC,无需调用toString()),通过字符串操作格式化:
// 定义格式化函数 String _formatEnumName(Name enumType) { final rawName = enumType.name; // 首字母大写,其余字母小写 return rawName[0].toUpperCase() + rawName.substring(1).toLowerCase(); } // 在Text组件中使用 Text( _formatEnumName(finalApi![widget.index].type), style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold, fontSize: 15, ), )
方案2:枚举扩展方法(推荐,复用性强)
给枚举类添加扩展方法,让所有枚举实例都能直接调用格式化方法:
// 给Name枚举添加扩展 extension NameDisplayExtension on Name { String toDisplayText() { final rawName = this.name; return rawName[0].toUpperCase() + rawName.substring(1).toLowerCase(); } } // 使用时更简洁 Text( finalApi![widget.index].type.toDisplayText(), style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold, fontSize: 15, ), )
方案3:支持带下划线的枚举常量(扩展场景)
如果你的枚举有类似FIRE_BALL的命名,需要转换为Fire Ball,可以修改扩展方法:
extension NameDisplayExtension on Name { String toDisplayText() { final parts = this.name.split('_'); // 分割每个部分后分别格式化,再用空格拼接 return parts.map((part) => part[0].toUpperCase() + part.substring(1).toLowerCase()).join(' '); } }
注意事项
- 优先使用枚举的
name属性而非toString(),因为toString()返回的是类名.常量名的格式,一旦类名修改会导致格式化失败;而name是枚举的内置属性,直接返回常量标识符,更稳定可靠。
内容的提问来源于stack exchange,提问作者yuuu
相关产品推荐
相关产品推荐

