deleteMessage method
Delete a message (mark as deleted on the server)
Implementation
Future<bool> deleteMessage(String messageId) async {
// Use custom handler if provided
if (_apiHandlers?.deleteMessageHandler != null) {
try {
bool success = await _apiHandlers!.deleteMessageHandler!(messageId);
if (success) {
int index = _messages.indexWhere((msg) => msg.messageId == messageId);
if (index != -1) {
_messages.removeAt(index);
_triggerEvent(ChatEventType.messagesChanged, _messages);
}
}
return success;
} catch (e) {
_log('Error in custom deleteMessageHandler: $e');
return false;
}
}
// Otherwise use default implementation
final userId = ChatConfig.instance.userId;
final token = ChatConfig.instance.token;
if (userId == null ||
token == null ||
_socket == null ||
!_socket!.connected) {
_log('Cannot delete message: not connected');
return false;
}
try {
// First find the message
int index = _messages.indexWhere((msg) => msg.messageId == messageId);
if (index == -1) {
_log('Message not found for deletion: $messageId');
return false;
}
// Only the sender can delete their message
if (_messages[index].senderId != userId) {
_log('Cannot delete message sent by another user');
return false;
}
// Emit delete event
_socket!.emit(_socketEvents.deleteMessageEvent,
{'messageId': messageId, 'userId': userId});
// Remove from local list
_messages.removeAt(index);
_triggerEvent(ChatEventType.messagesChanged, _messages);
return true;
} catch (e) {
_log('Error deleting message: $e');
return false;
}
}