non_sync_factory 진단: factory 생성자 본문은 async로 표시할 수 없어요
non_sync_factory 진단: factory 생성자 본문은 async로 표시할 수 없어요
Dart 분석기가 만들어 내는 non_sync_factory 진단에 대한 설명이에요.
출처: non_sync_factory
본문
factory 생성자의 본문이 async, async*, sync*로 표시되어 있을 때 분석기가 이 진단을 만들어요. 모든 생성자(factory 생성자 포함)는 Future, Stream, Iterator가 아니라 선언된 클래스의 인스턴스를 반환해야 하기 때문이에요.
설명
생성자는 항상 자신이 선언된 클래스의 인스턴스를 반환해야 해요. 그런데 본문을 async 등으로 표시하면 반환값이 Future 같은 걸로 바뀌어서 생성자 규칙에 어긋나요.
예시
다음 코드는 factory 생성자의 본문이 async로 표시되어 있어서 이 진단을 만들어요.
class C {
factory C() async {
return C._();
}
C._();
}
흔한 해결 방법
멤버를 factory 생성자로 선언해야 한다면 본문 앞에 붙은 키워드를 제거해요.
class C {
factory C() {
return C._();
}
C._();
}
둘러싼 클래스의 인스턴스가 아닌 다른 걸 반환해야 한다면 그 멤버를 static 메서드로 만들어요.
class C {
static Future<C> m() async {
return C._();
}
C._();
}