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_constructor_with_non_final_field

본문

설명

분석기는 생성자가 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);
}

더 알아보기