pattern_constant_from_deferred_library
延迟加载库中的常量值不能用于模式。
描述
#当模式包含在不同库中声明的值,并且该库是使用延迟导入(deferred import)导入时,分析器会生成此诊断。常量在编译时求值,但延迟加载库中的值在编译时不可用。
更多信息,请参阅延迟加载库。
示例
#给定一个定义常量 zero
的文件 a.dart
dart
const zero = 0;
以下代码会产生此诊断,因为常量模式 a.zero
是使用延迟导入导入的
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;
}
}