non_constant_list_element 진단: const 리스트 리터럴의 값은 상수여야 해요
non_constant_list_element 진단: const 리스트 리터럴의 값은 상수여야 해요
Dart 분석기가 만들어 내는 non_constant_list_element 진단은 const 리스트 리터럴 안의 값이 상수가 아닐 때 알려주는 컴파일 타임 진단이에요. 리스트가 명시적으로 const 키워드로 만들어졌든, 상수 문맥(constant context) 안에서 암시적으로 상수가 되었든, 그 안에 들어가는 요소는 반드시 컴파일 타임에 결정되는 상수여야 해요.
본문
설명
분석기는 상수 리스트 리터럴(const list literal)의 한 요소가 상수 값이 아닐 때 이 진단을 만들어요. 리스트 리터럴은 두 가지 방식으로 상수가 될 수 있어요.
- 명시적으로 —
const키워드가 앞에 붙는 경우 - 암시적으로 — 상수 문맥(constant context) 안에 나타나는 경우
상수 문맥은 const 키워드가 암시되는 코드 영역으로, 그 안의 모든 값이 상수여야 해요.
예시
다음 코드는 x가 상수가 아님에도 암시적으로 상수인 리스트 리터럴에 들어 있어서 이 진단을 만들어요.
var x = 2;
var y = const <int>[0, 1, x];
흔한 해결 방법
리스트가 상수 리스트여야 한다면, 요소가 상수가 되도록 바꿔요. 위 예시에서는 x의 선언에 const 키워드를 붙일 수 있어요.
const x = 2;
var y = const <int>[0, 1, x];
만약 그 표현식을 상수로 만들 수 없다면, 리스트도 상수가 될 수 없으므로 리스트가 상수가 아니도록 코드를 바꿔야 해요. 위 예시에서는 리스트 리터럴 앞의 const 키워드를 제거하면 돼요.
var x = 2;
var y = <int>[0, 1, x];