불변(immutable)이어야 합니다
불변(immutable)이어야 합니다
This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: {0}
이 진단은 @immutable로 표시된 클래스에 final이 아닌 인스턴스 필드가 있을 때 나타나요. 불변 클래스의 모든 인스턴스 필드는 final이어야 해요.
본문
이 애널라이저 진단은 불변(immutable) 클래스가 final이 아닌 인스턴스 필드를 하나 이상 정의할 때 발생해요. 클래스가 불변이라는 것은 immutable 애너테이션을 사용해 표시됐거나, 불변 클래스의 서브클래스인 경우를 말해요.
예시
다음 코드는 필드 x가 final이 아니기 때문에 이 진단이 나와요.
import 'package:meta/meta.dart';
@immutable
class C {
int x;
C(this.x);
}
일반적인 해결 방법
어떤 의도인지에 따라 두 가지 방법이 있어요.
1) 클래스 인스턴스가 불변이어야 한다면 final이 아닌 필드 선언 전체에 final 키워드를 추가해요.
import 'package:meta/meta.dart';
@immutable
class C {
final int x;
const C(this.x);
}
2) 클래스 인스턴스가 가변이어야 한다면 애너테이션을 제거해요. 애너테이션을 상속받은 경우라면 다른 슈퍼클래스를 선택하는 방법도 있어요.
class C {
int x;
C(this.x);
}