Flutter中List非final却无法添加元素:Unsupported operation: Cannot add to an unmodifiable list 问题求助
问题原因分析
你遇到的这个问题和messages字段有没有加final完全没关系,核心问题出在构造函数里的默认参数const []。
在Dart中,用const声明的集合(比如const [])是不可修改的(unmodifiable),不管它被赋值给的变量是不是final。当你创建Chat实例时如果没有显式传入messages参数,就会使用这个默认的不可变列表,后续调用add方法自然会抛出Unsupported operation异常。
看你的Chat类代码:
Chat({this.uuid, this.receiverUser, this.messages = const []});
这里的const []是编译时常量集合,它的所有修改操作(比如add、remove)都会触发不可修改的错误。
解决方案
你有两种常用的修复方式:
将默认参数改为可变列表
直接把默认值从const []改成普通的[],这样默认创建的就是可变List了:Chat({this.uuid, this.receiverUser, this.messages = []});注:如果Dart版本较低,这种写法可能会触发“默认参数应为常量”的警告,此时可以用第二种方案。
在构造函数中初始化可变列表
通过初始化列表,把传入的(或默认的)列表转换成可变的:Chat({this.uuid, this.receiverUser, List<Message> messages}) : messages = messages ?? [];这种方式更稳妥——不管传入的是可变还是不可变列表,都会生成一个新的可变列表;如果传入null,就创建新的空列表。
修复构造函数后,你在send方法里调用chat.messages.add(message)就能正常执行了。
内容的提问来源于stack exchange,提问作者combi35
相关产品推荐
相关产品推荐

