exhaustive_cases 
列挙型のようなクラスのすべての定数に対して case 節を定義します。
詳細
#列挙型のようなクラスのインスタンスに対する switch 文は網羅的であるべきです。
列挙型のようなクラスは、具体クラス(抽象クラスではない)として定義され、以下の条件を満たします。
- プライベートなファクトリーコンストラクタのみ
- 2つ以上の static const フィールドがあり、その型は囲むクラスである
- 定義ライブラリ内にそのクラスのサブクラスがない
DO 列挙型のようなクラスのすべての定数に対して case 節を定義してください。
悪い例
dart
class EnumLike {
  final int i;
  const EnumLike._(this.i);
  static const e = EnumLike._(1);
  static const f = EnumLike._(2);
  static const g = EnumLike._(3);
}
void bad(EnumLike e) {
  // Missing case.
  switch(e) { // LINT
    case EnumLike.e :
      print('e');
      break;
    case EnumLike.f :
      print('f');
      break;
  }
}良い例
dart
class EnumLike {
  final int i;
  const EnumLike._(this.i);
  static const e = EnumLike._(1);
  static const f = EnumLike._(2);
  static const g = EnumLike._(3);
}
void ok(EnumLike e) {
  // All cases covered.
  switch(e) { // OK
    case EnumLike.e :
      print('e');
      break;
    case EnumLike.f :
      print('f');
      break;
    case EnumLike.g :
      print('g');
      break;
  }
}有効にする
#exhaustive_cases ルールを有効にするには、analysis_options.yaml ファイルの linter > rules の下に exhaustive_cases を追加します。
analysis_options.yaml
yaml
linter:
  rules:
    - exhaustive_cases代わりに YAML マップ構文を使用してリンタルルールを設定している場合は、linter > rules の下に exhaustive_cases: true を追加します。
analysis_options.yaml
yaml
linter:
  rules:
    exhaustive_cases: true