メインコンテンツにスキップ

非_定数_ケース_式_遅延_ロード_ライブラリ_から

遅延ロードライブラリからの定数値は、ケース式として使用できません。

説明

#

遅延インポートを使用してインポートされたライブラリの定数をケース節の式が参照している場合、アナライザーはこの診断を生成します。switch ステートメントを効率的にコンパイルするには、ケース節で参照される定数がコンパイル時に利用可能である必要があり、遅延ロードライブラリからの定数はコンパイル時には利用できません。

詳細については、ライブラリの遅延ロード を参照してください。

#

定数 zero を定義するファイル a.dart があるとします。

dart
const zero = 0;

以下のコードは、ライブラリ a.dartdeferred インポートを使用してインポートされ、インポートされたライブラリで宣言された定数 a.zero が case 節で使用されているため、この診断を生成します。

dart
import 'a.dart' deferred as a;

void f(int x) {
  switch (x) {
    case a.zero:
      // ...
      break;
  }
}

一般的な修正

#

インポートされたライブラリの定数を参照する必要がある場合は、deferred キーワードを削除してください。

dart
import 'a.dart' as a;

void f(int x) {
  switch (x) {
    case a.zero:
      // ...
      break;
  }
}

インポートされたライブラリの定数を参照する必要があり、かつインポートされたライブラリを遅延ロードする必要がある場合は、switch ステートメントを if ステートメントのシーケンスに書き換えてください。

dart
import 'a.dart' deferred as a;

void f(int x) {
  if (x == a.zero) {
    // ...
  }
}

定数を参照する必要がない場合は、ケース式を置き換えてください。

dart
void f(int x) {
  switch (x) {
    case 0:
      // ...
      break;
  }
}