--- id: customize_message_widget sidebar_position: 11 title: Customizing The MessageWidget --- Customizing Text Messages ### Introduction Every application provides a unique look and feel to their own messaging interface including and not limited to fonts, colors, and shapes. This guide details how to customize the `MessageWidget` in the Stream Chat Flutter UI SDK. ### Building Custom Messages This guide goes into detail about the ability to customize the `MessageWidget`. However, if you want to customize the default `MessageWidget` in the `MessageListView` provided, you can use the `.copyWith()` method provided inside the `messageBuilder` parameter of the `MessageListView` like this: ```dart MessageListView( messageBuilder: (context, details, messageList, defaultImpl) { // Your implementation of the message here // E.g: return Text(details.message.text ?? ''); }, ), ``` ### Theming You can customize the `MessageWidget` using the `StreamChatTheme` class, so that you can change the message theme at the top instead of creating your own `MessageWidget` at the lower implementation level. There are several things you can change in the theme including text styles and colors of various elements. You can also set a different theme for the user's own messages and messages received by them. :::note Theming allows you to change minor factors like style while using the widget directly allows you much more customization such as replacing a certain widget with another. Some things can only be customized through the widget and not the theme. ::: Here is an example: ```dart StreamChatThemeData( /// Sets theme for user's messages ownMessageTheme: MessageThemeData( messageBackgroundColor: colorTheme.textHighEmphasis, ), /// Sets theme for received messages otherMessageTheme: MessageThemeData( avatarTheme: AvatarThemeData( borderRadius: BorderRadius.circular(8), ), ), ) ``` ![](../assets/message_theming.png) #### Change message text style The `MessageWidget` has multiple `Text` widgets that you can manipulate the styles of. The three main are the actual message text, user name, message links, and the message timestamp. ```dart MessageThemeData( messageTextStyle: TextStyle(...), createdAtStyle: TextStyle(...), messageAuthorStyle: TextStyle(...), messageLinksStyle: TextStyle(...), ) ``` ![](../assets/message_styles.png) #### Change avatar theme You can change the attributes of the avatar (if displayed) using the `avatarTheme` property. ```dart MessageThemeData( avatarTheme: AvatarThemeData( borderRadius: BorderRadius.circular(8), ), ) ``` ![](../assets/message_rounded_avatar.png) #### Changing Reaction theme You also customize the reactions attached to every message using the theme. ```dart MessageThemeData( reactionsBackgroundColor: Colors.red, reactionsBorderColor: Colors.redAccent, reactionsMaskColor: Colors.pink, ), ``` ![](../assets/message_reaction_theming.png) ### Changing Message Actions When a message is long pressed, the `MessageActionsModal` is shown. The `MessageWidget` allows showing or hiding some options if you so choose. ```dart MessageWidget( ... showUsername = true, showTimestamp = true, showReactions = true, showDeleteMessage = true, showEditMessage = true, showReplyMessage = true, showThreadReplyMessage = true, showResendMessage = true, showCopyMessage = true, showFlagButton = true, showPinButton = true, showPinHighlight = true, ), ``` ![](../assets/message_widget_actions.png) ### Building attachments The `customAttachmentBuilder` property allows you to build any kind of attachment (inbuilt or custom) in your own way. While a separate guide is written for this, it is included here because of relevance. ```dart MessageListView( messageBuilder: (context, details, messages, defaultMessage) { return defaultMessage.copyWith( customAttachmentBuilders: { 'location': (context, message, attachments) { final attachmentWidget = Image.network( _buildMapAttachment( attachments[0].extraData['latitude'], attachments[0].extraData['longitude'], ), ); return wrapAttachmentWidget(context, attachmentWidget, null, true, BorderRadius.circular(8.0)); } }, ); }, ), ``` ### Widget Builders Some parameters allow you to construct your own widget in place of some elements in the `MessageWidget`. These are: * `userAvatarBuilder` : Allows user to substitute their own widget in place of the user avatar. * `editMessageInputBuilder` : Allows user to substitute their own widget in place of the input in edit mode. * `textBuilder` : Allows user to substitute their own widget in place of the text. * `bottomRowBuilder` : Allows user to substitute their own widget in the bottom of the message when not deleted. * `deletedBottomRowBuilder` : Allows user to substitute their own widget in the bottom of the message when deleted. ```dart MessageWidget( ... textBuilder: (context, message) { // Add your own text implementation here. }, ), ```