sdk_version_ui_as_code_in_const_context 진단: 상수 컨텍스트의 UI 요소와 SDK 버전

sdk_version_ui_as_code_in_const_context 진단: 상수 컨텍스트의 UI 요소와 SDK 버전

if, spread 요소가 상수 표현식(constant expression)에서 지원되기 시작한 것은 2.5.0 버전부터인데요, 이 코드는 더 이른 버전의 SDK에서도 실행될 수 있어야 해요.

출처: sdk_version_ui_as_code_in_const_context

본문

설명

분석기는 SDK 제약 조건의 하한이 2.5.0보다 낮은 코드에서 상수 컨텍스트(constant context) 안의 if 또는 spread 요소를 발견하면 이 진단을 만들어요. 상수 컨텍스트 안에서 if 또는 spread 요소를 사용하는 것은 이전 버전에서는 지원되지 않았기 때문에, 이 코드는 이전 버전의 SDK에서는 실행할 수 없어요.

상수 컨텍스트(constant context)란 const 키워드가 암시되는 코드 영역으로, 그 영역 안의 모든 것은 상수여야 해요.

예시

다음은 하한이 2.5.0보다 낮은 SDK 제약 조건을 정의한 pubspec 예시예요.

environment:
  sdk: '>=2.4.0 <2.6.0'

해당 pubspec을 가진 패키지에서 아래와 같은 코드가 이 진단을 만들게 돼요.

const a = [1, 2];
const b = [...a];

흔한 해결 방법

이전 버전의 SDK를 지원할 필요가 없다면, 해당 문법을 쓸 수 있도록 SDK 제약 조건을 올리면 돼요.

environment:
  sdk: '>=2.5.0 <2.6.0'

이전 버전의 SDK를 지원해야 한다면, 그 요소들을 쓰지 않도록 코드를 다시 작성해요.

const a = [1, 2];
const b = [1, 2];

그게 불가능하다면, 요소가 상수 컨텍스트 안에 있지 않도록 코드를 바꿔요.

const a = [1, 2];
var b = [...a];

더 알아보기