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

return_in_generator

async* または sync* 修飾子を使用するジェネレーター関数からは値を返せません。

説明

#

ジェネレーター関数(本体が async* または sync* でマークされている関数)が、値を返すために return ステートメントを使用している場合、または => を使用しているために暗黙的に値を返している場合に、アナライザーはこの診断を生成します。これらのいずれの場合でも、return の代わりに yield を使用する必要があります。

#

以下のコードは、メソッド f がジェネレーターであり、値を返すために return を使用しているため、この診断を生成します。

dart
Iterable<int> f() sync* {
  return 3;
}

以下のコードは、関数 f がジェネレーターであり、暗黙的に値を返しているため、この診断を生成します。

dart
Stream<int> f() async* => 3;

一般的な修正

#

関数本体に => を使用している場合は、ブロック関数本体に変換し、値を返すために yield を使用してください。

dart
Stream<int> f() async* {
  yield 3;
}

メソッドがジェネレーターであることを意図している場合は、値を返すために yield を使用してください。

dart
Iterable<int> f() sync* {
  yield 3;
}

メソッドがジェネレーターであることを意図していない場合は、本体から修飾子を削除してください(または、Future を返している場合は async を使用してください)。

dart
int f() {
  return 3;
}