docs

TOP(About this memo)) > 一覧(Dart) > 列挙型

Enum

void main () {
  print(E1.values);
  print(E1.values.byName("A"));
  print(E1.A.name);
  //[E1.A, E1.B]
  //E1.A
  //A
}
enum E1 {
  A(1),
  B(2);
  final int f1;// finalである必要がある。
  const E1(this.f1);// constである必要がある。
}

/* 
enum E2 {
  A(DateTime.now());// constではない値を使うことはできない。
  final DateTime f1;
  const E2(this.f1);
}
*/

enumの判定はswitchを使う

enum FriendStatus {
  notFriend,
  friend,
}
if (status ==  FriendStatus.notFriend) {
 // ...
} else {
 // ...
}
// こちらの場合は網羅性を担保できる。
switch (status) {
  case FriendStatus.notFriend:
    // ...
  case FriendStatus.friend:
    // ...
  // もしFriendStatusに新しい値が追加された場合に、コンパイルエラーとして修正箇所を把握できる。
}

byXXXの実装

enum MyEnum {
  a(10),
  b(20);

  const MyEnum(this.code);

  static MyEnum byCode(int code) {
    return MyEnum.values.where((rt) => rt.code == code).toList().first;
  }

  final int code;
}