collection_element_from_deferred_library 진단: deferred 라이브러리의 상수 사용

collection_element_from_deferred_library 진단: deferred 라이브러리의 상수 사용

Dart 분석기가 만들어 내는 collection_element_from_deferred_library 진단에 대한 설명이에요.

출처: 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];

더 알아보기