diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index f19972b4..d68549e1 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,3 +1,9 @@ +## Upcoming + +🐞 Fixed + +- [[#888]](https://github.com/GetStream/stream-chat-flutter/issues/888) Fix `unban` command not working in `MessageInput`. + ## 3.4.0 - Updated `stream_chat_flutter_core` dependency to [`3.4.0`](https://pub.dev/packages/stream_chat_flutter_core/changelog). diff --git a/packages/stream_chat_flutter/lib/src/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input.dart index 8672f180..d1a45786 100644 --- a/packages/stream_chat_flutter/lib/src/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input.dart @@ -1816,6 +1816,8 @@ class MessageInputState extends State { _mentionedUsers.clear(); + message = _replaceUserNameWithId(message); + try { Future sendingFuture; if (widget.editMessage == null || @@ -2081,3 +2083,21 @@ class _CountdownButton extends StatelessWidget { ), ); } + +Message _replaceUserNameWithId(Message message) { + final mentionedUsers = message.mentionedUsers; + if (mentionedUsers.isEmpty) return message; + + var messageTextToSend = message.text; + if (messageTextToSend == null) return message; + + for (final user in mentionedUsers.toSet()) { + final userName = user.name; + messageTextToSend = messageTextToSend!.replaceAll( + '@$userName', + '@${user.id}', + ); + } + + return message.copyWith(text: messageTextToSend); +} diff --git a/packages/stream_chat_flutter/lib/src/message_text.dart b/packages/stream_chat_flutter/lib/src/message_text.dart index bb2946f4..4787bb9e 100644 --- a/packages/stream_chat_flutter/lib/src/message_text.dart +++ b/packages/stream_chat_flutter/lib/src/message_text.dart @@ -84,9 +84,10 @@ class MessageText extends StatelessWidget { String _replaceMentions(String text) { var messageTextToRender = text; for (final user in message.mentionedUsers.toSet()) { + final userId = user.id; final userName = user.name; messageTextToRender = messageTextToRender.replaceAll( - '@$userName', + '@$userId', '[@$userName](@${userName.replaceAll(' ', '')})', ); }