跳到主內容

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