こんにちは。Dart赤ん坊です。
Dartでよく言われる、Enum使いにくい問題。文字列化できないので、使い勝手が悪いんですよね。そこでextensionで使いやすくしてみました。staticも使えますし、もちろんパッケージのEnumも拡張できます。
以下のコードです。
/// サンプルEnum
enum Number { One, Two, Three }
/// サンプルEnumを拡張
extension NumberExtension on Number {
/// Enum内個別に文字列を取得
get name => this.toString().split(".").last;
/// Enum全体(NumberExtension)から全てのEnum内文字列を取得
static get names => Number.values.map((value) => value.name).toList();
}
/// 実行
main() {
print(Number.One.name);
// ↑結果:One
print(NumberExtension.names);
// ↑結果:[One, Two, Three]
// print(Number.names);
// これは出来ない
}
要点を解説すると、
extension NumberExtension on Number {
get name => this.toString().split(".").last;
static get names => Number.values.map((value) => value.name).toList();
}
extensionで、enumを拡張しています。一つ目はenumのメンバー?をtoString()した代物に"."でスプリットして、良い感じの文字列をとっています。二つ目では一つ目で作成したnameを利用して、staticでnamesを定義しています。
staticで設定したものはNumber.namesとして使用できそうなものですが、なぜかできないので、仕方なくNumberExtension.namesとして利用しています。それほど大きな面倒ではありませんので、十分利用価値はあるかと思います。
以上です。それでは。