跳到主要內容

collection_element_from_deferred_library

來自延遲載入庫的常量值不能用作 'const' 對映字面量中的鍵。

來自延遲載入庫的常量值不能用作 'const' 建構函式中的值。

來自延遲載入庫的常量值不能用作 'const' 列表字面量中的值。

來自延遲載入庫的常量值不能用作 'const' 對映字面量中的值。

來自延遲載入庫的常量值不能用作 'const' 集合字面量中的值。

描述

#

當集合字面量顯式(因為帶有 const 關鍵字字首)或隱式(因為它出現在 常量上下文中)為常量,並且包含一個從使用 deferred 匯入的庫中宣告的值時,分析器會生成此診斷。常量在編譯時進行評估,而來自延遲載入庫的值在編譯時不可用。

有關更多資訊,請參閱延遲載入庫

示例

#

假設有一個檔案 a.dart 定義了常量 zero

dart
const zero = 0;

以下程式碼會產生此診斷,因為常量列表字面量包含了 a.zero,而它是使用 deferred 匯入的

dart
import 'a.dart' deferred as a;

var l = const [a.zero];

常見修復方法

#

如果集合字面量不需要是常量,則移除 const 關鍵字

dart
import 'a.dart' deferred as a;

var l = [a.zero];

如果集合需要是常量且必須引用匯入的常量,則從匯入中移除 deferred 關鍵字

dart
import 'a.dart' as a;

var l = const [a.zero];

如果不需要引用該常量,則將其替換為合適的值

dart
var l = const [0];