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

Dart const构造函数不生效 实例id输出为0问题排查

问题根因

构造函数的入参根本没有绑定到类的实例属性上:

  • 你在类里直接给id写死了初始值0、name写死了初始值空字符串,这两个值是固定的,和构造函数接收的参数没有任何关系
  • 构造函数括号里定义的id、name只是函数内部的局部变量,传进来的值根本没同步到实例属性上,所以不管你创建实例时传什么参数,读出来的id永远是硬编码的0。
修复方案

先把属性上写死的初始值删掉,把构造参数和实例属性做绑定即可。const构造函数有两种合规写法:

  • 最简洁的写法是用this.语法糖,自动把同名入参绑定到实例属性,日常开发优先用这种:
class User {
  final int id;
  final String name;

  const User({this.id = 0, this.name = "anonymous"});
}
  • 如果要加参数校验,或者入参名和属性名不一致,可以用初始化列表显式赋值:
class User {
  final int id;
  final String name;

  const User({int id = 0, String name = "anonymous"})
    : assert(id >= 0, 'id不能为负'),
      id = id,
      name = name;
}

改完之后再运行,print(vicki.id)就会正确输出传入的24。

注意:const构造函数不允许在函数体内给属性赋值——因为const实例是编译期常量,所有属性必须在构造阶段就完成初始化,只能通过初始化列表或者this.语法糖赋值。

内容的提问来源于stack exchange,提问作者Sampath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:27:35