跳至主要内容

describeEnum 和 EnumProperty 迁移指南

摘要

#

全局方法 describeEnum 已弃用。以前使用 describeEnum(Enum.something) 的地方应改为使用 Enum.something.name

EnumProperty 类已修改为扩展 <T extends Enum?> 而不是 <T>。现有使用 EnumProperty<NotAnEnum> 的地方应改为使用 DiagnosticsProperty<NotAnEnum>

上下文

#

Dart 2.17 引入了 增强枚举,其中添加了 Enum 作为类型。因此,所有枚举都获得了 name 获取器,这使得 describeEnum 变得冗余。在此之前,枚举类通常使用 EnumProperty 进行分析。

describeEnum 方法用于将枚举值转换为字符串,因为 Enum.something.toString() 会生成 Enum.something 而不是 something,而许多用户希望得到后者。现在,name 获取器可以实现此功能。

describeEnum 函数即将弃用,因此 EnumProperty 类已更新为仅接受 Enum 对象。

更改说明

#

移除 describeEnum

  • describeEnum(Enum.something) 替换为 Enum.something.name

EnumProperty 现在期望为 null 或 Enum;您不能再将非 Enum 类传递给它。

迁移指南

#

如果您之前使用 describeEnum(Enum.field) 访问枚举的字符串值,现在可以调用 Enum.field.name

如果您之前使用 EnumProperty<NotAnEnum>,现在可以使用泛型 DiagnosticsProperty<NotAnEnum>

迁移前的代码

dart
enum MyEnum { paper, rock }

print(describeEnum(MyEnum.paper)); // output: paper

// TextInputType is not an Enum
properties.add(EnumProperty<TextInputType>( ... ));

迁移后的代码

dart
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