prefer_const_literals_to_create_immutables 진단: @immutable 클래스 생성자의 인자에 const 리터럴을 쓸 때

prefer_const_literals_to_create_immutables 진단: @immutable 클래스 생성자의 인자에 const 리터럴을 쓸 때

@immutable로 표시된 클래스에 선언된 생성자에 상수가 아닌 list·map·set 리터럴을 인자로 전달하면 Dart 분석기가 알려주는 린트(lint) 진단이에요. 불변 객체를 만드는 자리에 리터럴을 넘긴다면 그 리터럴도 상수로 만들어 두는 게 어울려요.

출처: prefer_const_literals_to_create_immutables

본문

설명

분석기는 @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]);

더 알아보기