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

Flutter中修改final对象属性未报错的原因咨询

为什么final修饰的对象能修改内部属性?

首先明确Dart里final的核心规则:final修饰的变量是「引用不可变」,不是「对象本身不可变」。

具体来说:

  • 当你用final声明widget.userModel时,只是规定了这个变量不能再指向另一个UserModel实例——比如你不能写widget.userModel = UserModel(...),这会直接报错。
  • 但如果UserModel类里的fullname、profilepic这些属性本身没有被final修饰,那你完全可以修改这个已有实例的内部属性值,这和widget.userModel是final的规则不冲突。

回到你的代码:
你修改的是widget.userModel这个实例的fullname和profilepic属性,并没有把widget.userModel换成另一个新的UserModel对象,所以完全符合Dart的final语法规则,代码自然能正常运行。

举个更直白的例子:

class Person {
  String name;
  Person({required this.name});
}

final Person p = Person(name: "张三");
p.name = "李四"; // 合法,只是修改对象内部属性
p = Person(name: "王五"); // 非法,试图改变final变量的引用指向

如果想让UserModel的属性也不能被修改,那需要把UserModel里的fullname、profilepic也声明为final,同时提供构造方法初始化,这样后续就无法修改这些属性了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:12:35