You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 10:29:31