首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向现有列表中添加不受支持的操作:无法添加到不可修改的列表中

如何向现有列表中添加不受支持的操作:无法添加到不可修改的列表中
EN

Stack Overflow用户
提问于 2021-03-09 15:49:34
回答 1查看 4.1K关注 0票数 6

我试图添加到List中,这会导致Unsupported operation: Cannot add to an unmodifiable list

但是消息列表不是最终的,为什么我不能添加项目呢?

代码语言:javascript
复制
class Chat {
  final String uuid;
  final User receiverUser;
  List<Message> messages;

  Chat({this.uuid, this.receiverUser, this.messages = const []});   
}

在我的提供者中,我有一个发送消息的方法

代码语言:javascript
复制
  void send(String receiverUUID) async {
    Message message = Message(
        message: messageController.text,
        receiverUUID: receiverUUID,
        timestamp: DateTime.now());

    await _messageApi.send(message);

    Chat chat = await _findOrCreate(receiverUUID);    
    /// FIXME Unhandled Exception: Unsupported operation: Cannot add to an unmodifiable list
    chat.messages.add(message);

    notifyListeners();
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-09 16:17:11

注意:如果messages是最终的,您仍然可以将项目添加到该列表中。问题是,messages被分配给构造函数中的默认const[]

而不是:

代码语言:javascript
复制
chat.messages.add(message);

试试这个:

代码语言:javascript
复制
chat.messages = [...chat.messages, message];

...扩展算子。这一行将在最后创建一个带有message的新列表。

您还可以使用List.from()..相结合。

代码语言:javascript
复制
chat.messages = List.from(chat.messages)..add(message);

在这里,..级联表示法。它将把message添加到新列表中,但是列表将被返回,而不是add方法的结果(这将是无效的)。

您还可以使用非const []初始化messages

代码语言:javascript
复制
class Chat {
  final String uuid;
  final User receiverUser;
  List<Message> messages;

  Chat({this.uuid, this.receiverUser, List<Messages>? messages})
    : messages = messages ?? [];   
}
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66550202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档