Flutter报错“Arguments of a constant creation must be constant expressions”求助
Flutter报错“Arguments of a constant creation must be constant expressions”求助
兄弟别慌!刚学Flutter踩这个坑太正常了,我来给你掰扯清楚为啥会出这个错👇
这个错误的核心原因很简单:当你用const关键字创建一个常量对象时,传入的所有参数必须是编译阶段就能确定值的常量表达式,绝对不能是运行时才会计算出来的变量或者动态值。
你代码里的questions[0]触发报错,大概率是下面两种情况之一:
- 要么你是在
const构造函数里传入了questions[0],但questions本身不是一个用const修饰的常量列表; - 要么
questions里的元素(也就是questions[0]对应的内容)本身不是常量,包含了运行时才能确定的值。
给你几个针对性的解决办法:
- 最省心的解决方式:如果你不需要当前创建的对象是常量,直接把代码里的
const关键字删掉就行!比如原来的const YourWidget(questions[0])改成YourWidget(questions[0]),这样就允许传入动态的变量了。 - 如果必须用常量:那得把
questions整个改成常量列表,而且里面的每个元素也必须是常量。举个例子:// 先把questions定义为const常量列表,内部元素也用const修饰 const List<Question> questions = const [ const Question('你喜欢Flutter吗?', ['喜欢', '超喜欢']), // ...其他问题元素也都要加const ]; // 这样再用const创建对象就不会报错了 const YourWidget(questions[0]) - 特殊情况排查:如果
questions[0]里包含了像DateTime.now()、用户输入内容这种只能运行时才能拿到的值,那这个元素根本没法做成常量,直接去掉const就好,别硬凑常量了。
刚学Flutter的时候,很容易把const和final搞混,多写几次代码慢慢就摸清楚它们的使用场景啦!
备注:内容来源于stack exchange,提问作者Raj Singh
相关产品推荐
相关产品推荐

