---
id: stream_message_widget
sidebar_position: 11
title: StreamMessageWidget
---

A Widget For Displaying Messages And Attachments

Find the pub.dev documentation [here](https://pub.dev/documentation/stream_chat_flutter/latest/stream_chat_flutter/StreamMessageWidget-class.html)

### Background

There are several things that need to be displayed with text in a message in a modern messaging app:
attachments, highlights if the message is pinned, user avatars of the sender, etc.

To encapsulate all of this functionality into one widget, the Flutter SDK contains a `StreamMessageWidget`
widget which provides these out of the box.

### Basic Example (Modifying `StreamMessageWidget` in `StreamMessageListView`)

Primarily, the `StreamMessageWidget` is used in the `StreamMessageListView`. To customize only a few properties
of the `StreamMessageWidget` without supplying all other properties, the `messageBuilder` builder supplies
a default implementation of the widget for us to modify.

```dart
class ChannelPage extends StatelessWidget {
  const ChannelPage({
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamMessageListView(
        messageBuilder: (context, details, messageList, defaultMessageWidget) {
           return defaultMessageWidget.copyWith(
             showThreadReplyIndicator: false,
           );
        },
      ),
    );
  }
}
```

### Building A Custom Attachment

When a custom attachment type (location, audio, etc.) is sent, the MessageWidget also needs to know
how to build it. For this purpose, we can use the `customAttachmentBuilders` parameter.

As an example, if a message has a attachment type 'location', we do:

```dart
StreamMessageWidget(
    //...
    customAttachmentBuilders: {
        'location': (context, message, attachments) {
            var attachmentWidget = Image.network(
              _buildMapAttachment(
                attachments[0].extraData['latitude'],
                attachments[0].extraData['longitude'],
              ),
            );

        return WrapAttachmentWidget(
              attachmentWidget: attachmentWidget, 
              attachmentShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
            );
    }
  },
)
```

You can also override the builder for existing attachment types like `image` and `video`.

### Show User Avatar For Messages

You can decide to show, hide, or remove user avatars of the sender of the message. To do this, set
the `showUserAvatar` property like this:

```dart
StreamMessageWidget(
    //...
    showUserAvatar = DisplayWidget.show,
)
```

### Reverse the message

In most cases, `StreamMessageWidget` needs to be a different orientation depending upon if the sender is the
user or someone else.

For this, we use the `reverse` parameter to change the orientation of the message:

```dart
StreamMessageWidget(
    //...
    reverse = true,
)
```
