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