跳到主内容

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;
  }
}