prefer_const_literals_to_create_immutables 진단: @immutable 클래스 생성자의 인자에 const 리터럴을 쓸 때
prefer_const_literals_to_create_immutables 진단: @immutable 클래스 생성자의 인자에 const 리터럴을 쓸 때
@immutable로 표시된 클래스에 선언된 생성자에 상수가 아닌 list·map·set 리터럴을 인자로 전달하면 Dart 분석기가 알려주는 린트(lint) 진단이에요. 불변 객체를 만드는 자리에 리터럴을 넘긴다면 그 리터럴도 상수로 만들어 두는 게 어울려요.
본문
설명
분석기는 @immutable 애너테이션이 붙은 클래스에 선언된 생성자에 상수가 아닌 list, map, 또는 set 리터럴이 인자로 전달될 때 이 진단을 만들어요.
예시
다음 코드는 list 리터럴([1])이 불변 클래스의 생성자에 전달되는데 상수 list가 아니라서 이 진단을 만들어요.
import 'package:meta/meta.dart';
@immutable
class C {
final List<int> f;
const C(this.f);
}
C c = C([1]);
흔한 해결 방법
문맥을 상수 문맥으로 만들 수 있다면 그렇게 해요.
import 'package:meta/meta.dart';
@immutable
class C {
final List<int> f;
const C(this.f);
}
const C c = C([1]);
문맥을 상수 문맥으로 만들 수는 없지만 생성자를 const로 호출할 수 있다면, 생성자 호출 앞에 const를 붙여요.
import 'package:meta/meta.dart';
@immutable
class C {
final List<int> f;
const C(this.f);
}
C c = const C([1]);
문맥을 상수 문맥으로 만들 수도 없고 생성자를 const로 호출할 수도 없다면, 컬렉션 리터럴 앞에 const 키워드를 붙이면 돼요.
import 'package:meta/meta.dart';
@immutable
class C {
final List<int> f;
const C(this.f);
}
C c = C(const [1]);