describeEnum
和 EnumProperty
迁移指南
概述
#全局方法 describeEnum
已被弃用。之前使用 describeEnum(Enum.something)
的地方应改用 Enum.something.name
。
类 EnumProperty
已修改为继承 <T extends Enum?>
而不是 <T>
。EnumProperty<NotAnEnum>
的现有用法应改用 DiagnosticsProperty<NotAnEnum>
。
背景
#Dart 2.17 引入了增强型枚举,它将 Enum
添加为一种类型。因此,所有枚举都获得了 name
getter,这使得 describeEnum
变得多余。在此之前,枚举类通常使用 EnumProperty
进行分析。
describeEnum
方法曾用于将枚举值转换为字符串,因为 Enum.something.toString()
会生成 Enum.something
而不是许多用户期望的 something
。现在,name
getter 完成了这项工作。
describeEnum
函数正在被弃用,因此 EnumProperty
类已更新为仅接受 Enum
对象。
变更说明
#移除 describeEnum
。
- 将
describeEnum(Enum.something)
替换为Enum.something.name
。
EnumProperty
现在期望 null 或一个 Enum
对象;您不能再向其传递非 Enum
类。
迁移指南
#如果您之前使用 describeEnum(Enum.field)
从枚举中访问字符串值,您现在可以调用 Enum.field.name
。
如果您之前使用 EnumProperty<NotAnEnum>
,您现在可以使用通用的 DiagnosticsProperty<NotAnEnum>
。
迁移前的代码
enum MyEnum { paper, rock }
print(describeEnum(MyEnum.paper)); // output: paper
// TextInputType is not an Enum
properties.add(EnumProperty<TextInputType>( ... ));
迁移后的代码
enum MyEnum { paper, rock }
print(MyEnum.paper.name); // output: paper
// TextInputType is not an Enum
properties.add(DiagnosticsProperty<TextInputType>( ... ));
时间线
#所在版本: 3.14.0-2.0.pre
稳定版本:3.16
参考资料
#API 文档
相关问题
相关 PR