Dart中常量列表字符串插值报错‘aConstList is not constant’的疑问
问题原因与解决方法
你遇到的问题核心在于:Dart的const字符串插值,只支持原始类型(num、bool、String)的常量,或者能在编译时直接计算出字符串结果的表达式。
虽然aConstList是const列表,但它的toString()方法是在运行时执行的,编译器没办法在编译阶段就确定它转换成字符串后的结果,所以没办法把它放到const字符串的插值里——这就是报错aConstList is not constant的原因。
解决办法
如果想在const字符串里包含列表的内容,有两种可行方式:
- 直接把列表的字符串形式写死在const字符串里:
const validConstString = '$aConstNum $aConstBool $aConstString [1, 2, 3]'; - 把列表的字符串表示单独定义成一个const字符串,再插值:
const aConstList = const [1, 2, 3]; const aConstListStr = '[1, 2, 3]'; // 和aConstList内容对应 const validConstString = '$aConstNum $aConstBool $aConstString $aConstListStr';
另外要注意:如果你的字符串不需要是const的,只是普通的final字符串,那直接用原来的写法就没问题,因为运行时会调用列表的toString()方法生成结果:
final validFinalString = '$aConstNum $aConstBool $aConstString $aConstList';
内容的提问来源于stack exchange,提问作者user2237631
相关产品推荐
相关产品推荐

