跳过主内容

non_sync_factory

工厂函数体不能使用 'async', 'async*', 或 'sync*'。

描述

#

当工厂构造函数体被标记为 async, async*, 或 sync* 时,分析器会产生此诊断。所有构造函数,包括工厂构造函数,都要求返回声明它们所在的类实例,而不是 Future, Stream, 或 Iterator

示例

#

以下代码会产生此诊断,因为工厂构造函数体被标记为 async

dart
class C {
  factory C() async {
    return C._();
  }
  C._();
}

常见修复方法

#

如果该成员必须声明为工厂构造函数,则移除函数体前的关键字

dart
class C {
  factory C() {
    return C._();
  }
  C._();
}

如果该成员必须返回除其所在类的实例以外的内容,则将该成员设为静态方法

dart
class C {
  static Future<C> m() async {
    return C._();
  }
  C._();
}