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 或 an 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