跳到主要内容

return_in_generator

不能从使用 'async*' 或 'sync*' 修饰符的生成器函数返回一个值。

描述

#

当生成器函数(其函数体标记有 async*sync*)使用 return 语句返回值,或由于使用 => 隐式返回值时,分析器会生成此诊断信息。在任何这些情况下,都应该使用 yield 代替 return

示例

#

以下代码会生成此诊断信息,因为方法 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;
}