collection_element_from_deferred_library 진단: deferred 라이브러리의 상수 사용
collection_element_from_deferred_library 진단: deferred 라이브러리의 상수 사용
Dart 분석기가 만들어 내는 collection_element_from_deferred_library 진단에 대한 설명이에요.
본문
분석기는 컬렉션 리터럴이 const 키워드로 명시적으로 상수이거나, 상수 컨텍스트(코드에서 const가 생략된 상수 영역) 안에 있어서 암묵적으로 상수일 때, 그 안에 deferred import로 가져온 라이브러리에서 선언된 값이 들어 있으면 이 진단을 만들어요. 상수는 컴파일 시점에 평가되는데, deferred 라이브러리의 값은 컴파일 시점에 아직 준비되어 있지 않기 때문이에요.
더 자세한 내용은 Lazily loading a library 문서를 확인해 보세요.
예시
a.dart 파일에 상수 zero가 정의되어 있다고 해 볼게요.
const zero = 0;
다음 코드는 상수 리스트 리터럴 안에 deferred import로 가져온 a.zero가 들어 있어서 이 진단을 만들어요.
import 'a.dart' deferred as a;
var l = const [a.zero];
흔한 해결 방법
컬렉션 리터럴이 반드시 상수일 필요가 없다면, const 키워드를 빼면 돼요.
import 'a.dart' deferred as a;
var l = [a.zero];
컬렉션이 상수여야 하고 가져온 상수를 참조해야 한다면, import에서 deferred 키워드를 빼면 돼요.
import 'a.dart' as a;
var l = const [a.zero];
상수를 굳이 참조할 필요가 없다면, 적절한 값으로 바꿔주면 돼요.
var l = const [0];