feat: add senderTitleResolver to override the default sender.firstName for chat messages

This commit is contained in:
Freek van de Ven 2025-02-20 13:34:37 +01:00 committed by FlutterJoey
parent 2508789a6d
commit 590a339d0d
3 changed files with 16 additions and 3 deletions

View file

@ -19,6 +19,7 @@
- Added imagePickerBuilder to the builders in the ChatOptions to override the image picker with a custom implementation that needs to return a Future<Uint8List?>
- Changed the ChatBottomInputSection to be multiline and go from 45px to 120px in height depending on how many lines are in the textfield
- Added chatScreenBuilder to the userstory configuration to customize the specific chat screen with a ChatModel as argument
- Added senderTitleResolver to the ChatOptions to resolve the title of the sender in the chat message
## 4.0.0
- Move to the new user story architecture

View file

@ -18,6 +18,7 @@ class ChatOptions {
this.messageTheme,
this.messageThemeResolver = _defaultMessageThemeResolver,
this.chatTitleResolver,
this.senderTitleResolver,
this.iconEnabledColor,
this.iconDisabledColor,
this.chatAlignment,
@ -72,6 +73,11 @@ class ChatOptions {
/// the chat in the ChatDetailScreen.
final ChatTitleResolver? chatTitleResolver;
/// If [senderTitleResolver] is set, it will be used to get the title of
/// the sender in a chat message. If not set, the [sender.firstName] is used.
/// [sender] can be null if the message is an event.
final SenderTitleResolver? senderTitleResolver;
/// The alignment of the chatmessages in the ChatDetailScreen.
/// Defaults to [Alignment.bottomCenter]
final Alignment? chatAlignment;
@ -90,6 +96,10 @@ class ChatOptions {
/// a chat.
typedef ChatTitleResolver = String? Function(ChatModel chat);
/// Typedef for the senderTitleResolver function that is used to get a title for
/// a sender.
typedef SenderTitleResolver = String? Function(UserModel? user);
/// Typedef for the messageThemeResolver function that is used to get a
/// [MessageTheme] for a message. This can return null so you can fall back to
/// default values for some messages.

View file

@ -149,8 +149,10 @@ class _ChatMessageBubble extends StatelessWidget {
showFullDate: isNewDate || previousMessage == null,
);
var senderTitle = Text(
sender?.firstName ?? "",
var senderTitle =
options.senderTitleResolver?.call(sender) ?? sender?.firstName ?? "";
var senderTitleText = Text(
senderTitle,
style: theme.textTheme.titleMedium,
);
@ -176,7 +178,7 @@ class _ChatMessageBubble extends StatelessWidget {
children: [
if (messageTheme.showName! && !isSameSender) ...[
SizedBox(height: options.spacing.chatBetweenMessagesPadding),
senderTitle,
senderTitleText,
],
const SizedBox(height: 4),
DefaultChatMessageContainer(