我正在尝试添加到List导致Unsupported operation: Cannot add to an unmodifiable list
但消息列表不是最终的,为什么我不能向其中添加项目?
class Chat {
final String uuid;
final User receiverUser;
List<Message> messages;
Chat({this.uuid, this.receiverUser, this.messages = const []});
}
Run Code Online (Sandbox Code Playgroud)
在我的提供程序中,我有一个发送消息方法
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();
}
Run Code Online (Sandbox Code Playgroud)
Thi*_*rry 36
注意:如果messages是最终版本,您仍然可以将项目添加到该列表中。问题是它messages被分配给const[]构造函数中的默认值。
代替:
chat.messages.add(message);
Run Code Online (Sandbox Code Playgroud)
尝试这个:
chat.messages = [...chat.messages, message];
Run Code Online (Sandbox Code Playgroud)
...是价差运算符。message此行将在末尾创建一个新列表。
您还可以List.from()结合使用..:
chat.messages = List.from(chat.messages)..add(message);
Run Code Online (Sandbox Code Playgroud)
这里..是级联表示法。它将添加message到新列表中,但将返回列表而不是add方法的结果(这将是无效的)。
messages您还可以使用非常量 [] 来初始化:
class Chat {
final String uuid;
final User receiverUser;
List<Message> messages;
Chat({this.uuid, this.receiverUser, List<Messages>? messages})
: messages = messages ?? [];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8430 次 |
| 最近记录: |