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