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

label_in_outer_scope

外側のメソッドで宣言されたラベル「{0}」を参照できません。

説明

#

break または continue ステートメントが、そのステートメントを含む関数内の関数で宣言されたラベルを参照する場合、アナライザーはこの診断を生成します。break および continue ステートメントは、それらを含む関数の外部への制御の転送には使用できません。

#

以下のコードは、ラベル loop がローカル関数 g の外側で宣言されているため、この診断を生成します。

dart
void f() {
  loop:
  while (true) {
    void g() {
      break loop;
    }

    g();
  }
}

一般的な修正

#

ローカル関数をインライン化するなど、ローカル関数の外部への制御の転送を不要にするようにコードを書き換えてください。

dart
void f() {
  loop:
  while (true) {
    break loop;
  }
}

それが不可能な場合は、関数から返される値を使用して制御が転送されるかどうかを判断できるように、ローカル関数を書き換えるようにしてください。

dart
void f() {
  loop:
  while (true) {
    bool g() {
      return true;
    }

    if (g()) {
      break loop;
    }
  }
}