Dartのenumについての小ネタです。
IDやエラーコードの管理などで、連番ではないenumを作成したい場合がありますが、Dartでは以下のように実装できます。(enhanced enum)
Dart
enum TestEnum {
  zero(0),
  two(2),
  four(4),
  six(6);
  const TestEnum(this.value);
  final int value;
}このような場合enumから値(int)への変換と、その逆変換(int→enum)ができると便利です。
いくつか方法はあると思いますが、以下のようにするのがシンプルで良さそうに思います。
Dart
      enum TestEnum {
  zero(0),
  two(2),
  four(4),
  six(6);
  const TestEnum(this.value);
  final int value;
  static TestEnum fromInt(int v) {
    return TestEnum.values.firstWhere(
      (e) => e.value == v,
      orElse: () => TestEnum.zero,  // 見つからない場合
    );
  }
}
void main() {
  print(TestEnum.two.index);  // 1(0始まりのインデックスで取得)
  print(TestEnum.two.value);  // 2(値を取得)
  print(TestEnum.fromInt(4)); // TestEnum.four
  print(TestEnum.fromInt(8)); // TestEnum.zero(範囲外)
}
 
  
  
  
  
コメント