deleteReaction method
Delete a reaction from this channel.
Implementation
Future<EmptyResponse> deleteReaction(
Message message,
Reaction reaction,
) async {
final type = reaction.type;
final reactionCounts = {...?message.reactionCounts};
if (reactionCounts.containsKey(type)) {
reactionCounts.update(type, (value) => value - 1);
}
final reactionScores = {...?message.reactionScores};
if (reactionScores.containsKey(type)) {
reactionScores.update(type, (value) => value - 1);
}
final latestReactions = [...?message.latestReactions]..removeWhere((r) =>
r.userId == reaction.userId &&
r.type == reaction.type &&
r.messageId == reaction.messageId);
final ownReactions = [...?message.ownReactions]..removeWhere((r) =>
r.userId == reaction.userId &&
r.type == reaction.type &&
r.messageId == reaction.messageId);
final newMessage = message.copyWith(
reactionCounts: reactionCounts..removeWhere((_, value) => value == 0),
reactionScores: reactionScores..removeWhere((_, value) => value == 0),
latestReactions: latestReactions,
ownReactions: ownReactions,
);
state?.updateMessage(newMessage);
try {
final deleteResponse = await _client.deleteReaction(
message.id,
reaction.type,
);
return deleteResponse;
} catch (_) {
// Reset the message if the update fails
state?.updateMessage(message);
rethrow;
}
}