跳到主要內容

sdk_version_ui_as_code_in_const_context

在 2.5.0 版本之前,常量表達式不支援 if 和擴充套件元素,但此程式碼需要在早期版本上執行。

描述

#

當分析器在 SDK 約束的下限小於 2.5.0 的程式碼中發現 常量上下文 中的 if 或擴充套件元素時,會生成此診斷。在早期版本中不支援在 常量上下文 中使用 if 或擴充套件元素,因此此程式碼無法在早期 SDK 版本上執行。

示例

#

這是一個 pubspec 檔案的示例,其中定義了一個 SDK 約束,其下限小於 2.5.0

yaml
environment:
  sdk: '>=2.4.0 <2.6.0'

在使用此 pubspec 檔案的包中,以下程式碼會生成此診斷

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

常見修復方法

#

如果您不需要支援舊版本的 SDK,則可以提高 SDK 約束,以允許使用該語法

yaml
environment:
  sdk: '>=2.5.0 <2.6.0'

如果您需要支援舊版本的 SDK,則重寫程式碼以不使用這些元素

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

如果無法做到這一點,則更改程式碼,使元素不在 常量上下文

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