const_constructor_with_non_final_field 진단: non-final 필드가 있는 클래스에는 const 생성자를 쓸 수 없어요
const_constructor_with_non_final_field 진단: non-final 필드가 있는 클래스에는 const 생성자를 쓸 수 없어요
const_constructor_with_non_final_field 진단은 const 생성자가, final이 아닌 인스턴스 필드를 하나라도 가진 클래스 안에 정의될 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. const 객체는 불변이어야 하는데 non-final 필드가 있으면 그 불변성이 깨지니까요. 상속받은 필드까지 포함해요.
본문
설명
분석기는 생성자가 const 생성자로 표시되었는데, 그 생성자가 정의된 클래스에 final이 아닌 인스턴스 필드가 하나라도 있으면(직접 정의했든 상속받았든) 이 진단을 만들어요.
예시
다음 코드는 필드 x가 final이 아니기 때문에 이 진단이 나와요.
class C {
int x;
const C(this.x);
}
흔한 해결 방법
모든 필드를 final로 표시할 수 있다면 그렇게 해요.
class C {
final int x;
const C(this.x);
}
모든 필드를 final로 만들 수 없다면, 생성자에서 const 키워드를 제거해요.
class C {
int x;
C(this.x);
}