const_constructor_with_non_const_super 진단: const 생성자가 const가 아닌 super 생성자를 부르면 안 돼요

const_constructor_with_non_const_super 진단: const 생성자가 const가 아닌 super 생성자를 부르면 안 돼요

const_constructor_with_non_const_super 진단은 const로 표시된 생성자가, 상위 클래스에서 const로 표시되지 않은 생성자를 호출할 때 Dart 분석기가 알려주는 컴파일 타임 진단이에요. 상위 생성자까지 상수여야 const 체인이 이어지니까요.

출처: const_constructor_with_non_const_super

본문

설명

분석기는 const로 표시된 생성자가, 상위 클래스에서 상수로 표시되지 않은 생성자를 호출할 때 이 진단을 만들어요.

예시

다음 코드는 Bconst 생성자가 클래스 A의 생성자 nonConst를 호출하는데, 이 상위 클래스 생성자가 const 생성자가 아니기 때문에 이 진단이 나와요.

class A {
  const A();
  A.nonConst();
}

class B extends A {
  const B() : super.nonConst();
}

흔한 해결 방법

지금 호출하는 상위 클래스 생성자를 꼭 써야 하는 게 아니라면, 상위 클래스의 const 생성자를 호출해요.

class A {
  const A();
  A.nonConst();
}

class B extends A {
  const B() : super();
}

지금 호출하는 생성자를 반드시 써야 하고, 그 생성자를 수정할 수 있다면 상위 클래스 생성자에 const를 추가해요.

class A {
  const A();
  const A.nonConst();
}

class B extends A {
  const B() : super.nonConst();
}

지금 호출하는 생성자를 반드시 써야 하는데 수정할 수 없다면, 하위 클래스 생성자에서 const를 제거해요.

class A {
  const A();
  A.nonConst();
}

class B extends A {
  B() : super.nonConst();
}

더 알아보기