跳到主要内容

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