目次

exhaustive_cases

列挙型のようなクラス内のすべての定数に対してケース節を定義します。

このルールは、Dart 2.9 から利用可能です。

ルールセット:推奨Flutter

このルールにはクイックフィックスが利用可能です。

詳細

#

列挙型のようなクラスのインスタンスに対する切り替えは、網羅的である必要があります。

列挙型のようなクラスは、以下の条件を満たす具体的な(抽象的でない)クラスとして定義されます。

  • プライベートな非ファクトリコンストラクタのみを持つ
  • 2 つ以上の、型が包含クラスである静的定数フィールドを持つ
  • 定義ライブラリ内にそのクラスのサブクラスを持たない

実行 列挙型のようなクラス内のすべての定数に対してケース節を定義します。

悪い例

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