non_constant_case_expression_from_deferred_library
来自延迟加载库的常量值不能用作 case 表达式。
描述
#当 case 子句中的表达式引用了通过 deferred 导入方式引入的库中的常量时,分析器会生成此诊断信息。为了高效地编译 switch 语句,case 子句中引用的常量需要在编译时可用,而来自延迟加载库的常量在编译时不可用。
更多信息请参见延迟加载库。
示例
#假设文件 a.dart
定义了常量 zero
dart
const zero = 0;
以下代码会生成此诊断信息,因为库 a.dart
是通过 deferred
导入的,并且在导入库中声明的常量 a.zero
用在了 case 子句中
dart
import 'a.dart' deferred as a;
void f(int x) {
switch (x) {
case a.zero:
// ...
break;
}
}
常见修复
#如果您需要引用导入库中的常量,请移除 deferred
关键字
dart
import 'a.dart' as a;
void f(int x) {
switch (x) {
case a.zero:
// ...
break;
}
}
如果您需要引用导入库中的常量,同时又需要导入库是延迟加载的,则将 switch 语句重写为一系列 if
语句
dart
import 'a.dart' deferred as a;
void f(int x) {
if (x == a.zero) {
// ...
}
}
如果您不需要引用该常量,则替换 case 表达式
dart
void f(int x) {
switch (x) {
case 0:
// ...
break;
}
}