상수 문맥에서의 as 표현식은 이 SDK 버전에서 지원되지 않아요

상수 문맥에서의 as 표현식은 이 SDK 버전에서 지원되지 않아요

sdk_version_as_expression_in_const_context 진단은 상수 문맥(constant context) 안에서 as 표현식을 쓰는 코드가, as를 상수 문맥에서 지원하지 않는 이전 SDK 버전에서도 돌아야 할 때 알려주는 경고예요. SDK 제약과 코드 사용 방식 중 하나를 맞춰 주면 돼요.

출처: The use of an as expression in a constant expression wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions.

본문

Dart 분석기는 하한(lower bound)이 2.3.2보다 낮은 SDK 제약을 가진 코드에서, 상수 문맥 안에 as 표현식이 쓰이는 걸 발견하면 이 진단을 만들어요. 상수 문맥은 const 키워드가 생략된 것으로 간주되는 코드 영역을 말하고, 그 영역 안의 모든 것이 상수여야 해요. as 표현식을 상수 문맥에서 쓰는 건 이전 버전에서 지원되지 않았기 때문에, 이 코드는 이전 SDK 버전에서 실행할 수 없어요.

예시

먼저, 하한이 2.3.2보다 낮은 SDK 제약을 정의한 pubspec 예시를 볼게요.

environment:
  sdk: '>=2.1.0 <2.4.0'

그 pubspec을 가진 패키지 안에서 아래 같은 코드가 있으면 이 진단이 발생해요.

const num n = 3;
const int i = n as int;

흔한 해결 방법

이전 SDK 버전을 지원할 필요가 없다면, 표현식을 쓸 수 있도록 SDK 제약을 올리면 돼요.

environment:
  sdk: '>=2.3.2 <2.4.0'

이전 SDK 버전을 지원해야 한다면, as 표현식을 쓰지 않도록 코드를 다시 쓰거나, as 표현식이 상수 문맥에 있지 않도록 바꾸면 돼요.

num x = 3;
int y = x as int;

더 알아보기