> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Message Header

## Overview

`CometChatMessageHeader` is a [Widget](/ui-kit/flutter/components-overview#components) that showcases the [User](/sdk/flutter/users-overview) or [Group](/sdk/flutter/groups-overview) details in the toolbar. Furthermore, it also presents a typing indicator and a back navigation button for ease of use.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/1gtOmNl1ryouxO5Y/images/8a6e5f89-message_header-54abac45ab669c3eb45f530d18909c93.png?fit=max&auto=format&n=1gtOmNl1ryouxO5Y&q=85&s=e68a0c3e389260f4c15a3d532899b906" width="2560" height="480" data-path="images/8a6e5f89-message_header-54abac45ab669c3eb45f530d18909c93.png" />
</Frame>

The `CometChatMessageHeader` is comprised of the following components:

| Components                                   | Description                                                                                                                                      |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| [ListItem Widget](/ui-kit/flutter/list-item) | This component’s widget consists of avatar, status indicator , title, and subtitle. The fields are then mapped with the SDK’s user, group class. |
| Back Button                                  | BackButton that allows users to navigate back from the current activity or screen to the previous one                                            |

## Usage

### Integration

You can launch `CometChatMessageHeader` directly using `Navigator.push`, or you can define it as a widget within the `build` method of your `State` class.

##### 1. Using Navigator to Launch `CometChatMessageHeader`

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    Navigator.push(context, MaterialPageRoute(builder: (context) => CometChatMessageHeader())); // A user or group object is required to launch this widget.
    ```
  </Tab>
</Tabs>

##### 2. Embedding `CometChatMessageHeader` as a Widget in the build Method

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
    import 'package:flutter/material.dart';

    class MessageHeader extends StatefulWidget {
      const MessageHeader({super.key});

      @override
      State<MessageHeader> createState() => _MessageHeaderState();
    }

    class _MessageHeaderState extends State<MessageHeader> {

      @override
      Widget build(BuildContext context) {
        return Scaffold(
            body: SafeArea(
                child: CometChatMessageHeader() // A user or group object is required to launch this widget.
            )
        );
      }
    }
    ```
  </Tab>
</Tabs>

***

### Actions

[Actions](/ui-kit/flutter/components-overview#actions) dictate how a widget functions. They are divided into two types: Predefined and User-defined. You can override either type, allowing you to tailor the behavior of the widget to fit your specific needs.

##### 1. onBack

Enhance your application's functionality by leveraging the `onBack` feature. This capability allows you to customize the behavior associated with navigating back within your app. Utilize the provided code snippet to override default behaviors and tailor the user experience according to your specific requirements.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
      user: user,
      onBack: () {
        // TODO("Not yet implemented")
      },
    )
    ```
  </Tab>
</Tabs>

***

### Filters

**Filters** allow you to customize the data displayed in a list within a `Widget`. You can filter the list based on your specific criteria, allowing for a more customized. Filters can be applied using `RequestBuilders` of Chat SDK.

The `CometChatMessageHeader` widget does not have any exposed filters.

***

## Customization

To fit your app's design requirements, you can customize the appearance of the conversation widget. We provide exposed methods that allow you to modify the experience and behavior according to your specific needs.

## Style

To customize the appearance, you can assign a `CometChatMessageHeaderStyle` object to the `CometChatMessageHeader` widget.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
      user: user,
      messageHeaderStyle: CometChatMessageHeaderStyle(
           avatarStyle: CometChatAvatarStyle(
              backgroundColor: Color(0xFFFBAA75),
              borderRadius: BorderRadius.circular(6.67),
           ),
           callButtonsStyle: CometChatCallButtonsStyle(
              voiceCallIconColor: Color(0xFFF76808),
              videoCallIconColor: Color(0xFFF76808),
            ),
        )
    )
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/why4qwLRU92tDIid/images/7997ba37-message_header_styling-508bff70fcee0fbc5f338d60e996ff87.png?fit=max&auto=format&n=why4qwLRU92tDIid&q=85&s=419bcc2f9053837b1d7454ce19b734dd" width="2560" height="480" data-path="images/7997ba37-message_header_styling-508bff70fcee0fbc5f338d60e996ff87.png" />
</Frame>

***

### Functionality

These are a set of small functional customizations that allow you to fine-tune the overall experience of the widget. With these, you can change text, set custom icons, and toggle the visibility of UI elements.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/1gtOmNl1ryouxO5Y/images/8a6e5f89-message_header-54abac45ab669c3eb45f530d18909c93.png?fit=max&auto=format&n=1gtOmNl1ryouxO5Y&q=85&s=e68a0c3e389260f4c15a3d532899b906" width="2560" height="480" data-path="images/8a6e5f89-message_header-54abac45ab669c3eb45f530d18909c93.png" />
</Frame>

Here is a code snippet demonstrating how you can customize the functionality of the Message Header widget.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
      user: user,
      showBackButton: true,
      usersStatusVisibility: true,
    )
    ```
  </Tab>
</Tabs>

## CometChatMessageHeader Properties

Following is a list of customizations along with their corresponding code snippets:

| Property                    | Data Type                                                                 | Description                                                    |
| --------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------- |
| `backButton`                | `WidgetBuilder?`                                                          | Used to set the back button widget.                            |
| `subtitleView`              | `Widget? Function(Group? group, User? user, BuildContext context)?`       | To set subtitle view for the group or user.                    |
| `user`                      | `User?`                                                                   | Set `User` object, one is mandatory either `user` or `group`.  |
| `group`                     | `Group?`                                                                  | Set `Group` object, one is mandatory either `user` or `group`. |
| `listItemView`              | `Widget Function(Group? group, User? user, BuildContext context)?`        | Set custom view for list item.                                 |
| `messageHeaderStyle`        | `CometChatMessageHeaderStyle?`                                            | Set styling props for message header.                          |
| `listItemStyle`             | `ListItemStyle?`                                                          | Style for every list item.                                     |
| `trailingView`              | `List<Widget>? Function(User? user, Group? group, BuildContext context)?` | Set appbar options for the trailing view.                      |
| `onBack`                    | `VoidCallback?`                                                           | Callback triggered on closing the screen.                      |
| `avatarHeight`              | `double?`                                                                 | Set height for avatar.                                         |
| `avatarWidth`               | `double?`                                                                 | Set width for avatar.                                          |
| `height`                    | `double?`                                                                 | Set height for message header.                                 |
| `padding`                   | `EdgeInsetsGeometry?`                                                     | Set padding for message header.                                |
| `showVideoCallButton`       | `bool?`                                                                   | Used to hide/display video call button.                        |
| `showVoiceCallButton`       | `bool?`                                                                   | Used to hide/display voice call button.                        |
| `leadingStateView`          | `Widget? Function(Group? group, User? user, BuildContext context)?`       | To set leading view for the message header.                    |
| `titleView`                 | `Widget? Function(Group? group, User? user, BuildContext context)?`       | To set the title view for the message header.                  |
| `auxiliaryButtonView`       | `Widget? Function(Group? group, User? user, BuildContext context)?`       | To set auxiliary view for the message header.                  |
| `dateTimeFormatterCallback` | `DateTimeFormatterCallback?`                                              | Callback that can be used to format the date and time.         |
| `hideChatHistoryButton`     | `bool?`                                                                   | Hide chat history button.                                      |
| `hideNewChatButton`         | `bool?`                                                                   | Hide new chat button.                                          |
| `newChatButtonClick`        | `VoidCallback?`                                                           | Callback triggered on new chat button click.                   |
| `chatHistoryButtonClick`    | `VoidCallback?`                                                           | Callback triggered on chat history button click.               |
| `newChatIcon`               | `IconData?`                                                               | Provides new chat icon.                                        |
| `chatHistoryIcon`           | `IconData?`                                                               | Provides chat history icon.                                    |

***

### Advanced

For advanced-level customization, you can set custom views to the widget. This lets you tailor each aspect of the widget to fit your exact needs and application aesthetics. You can create and define your own widget and then incorporate those into the widget.

***

#### auxiliaryButtonView

Allows adding a custom button or additional action next to the title or trailing section.

Use Cases:

* Add a Call button (📞) for quick voice/video calls.
* Include a Block/Report button for moderation.
* Implement a Pin Chat feature.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
       auxiliaryButtonView: (group, user, context) {
        // return auxiliary view 
      },
    )
    ```
  </Tab>
</Tabs>

***

#### ListItemView

The `CometChatMessageHeader` widget consists of a `ListItemView`. You can customize the ListItem according to your requirements by using the `.setListItemView` method.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
      user: user,
      listItemView: (Group? group, User? user, context) {
        return Placeholder(); // Replace this placeholder with your custom widget.
      },
    )
    ```
  </Tab>
</Tabs>

**Example**

Here is the complete example for reference:

<Tabs>
  <Tab title="Dart">
    ```dart main.dart theme={null}
      CometChatMessageHeader(
          user: user,
          group: group,
          listItemView: (group, user, context) {
            return CometChatListItem(
              avatarURL: group != null ? group.icon : user?.avatar,
              avatarName: group != null ? group.name : user?.name,
              avatarStyle: CometChatAvatarStyle(
                  borderRadius: BorderRadius.circular(6.67),
                  backgroundColor: Color(0xFFAA9EE8)),
              title: group != null ? group.name : user?.name ?? "",
              subtitleView: Text(
                user != null
                    ? (user.status == UserStatusConstants.online
                        ? "Online"
                        : "Offline")
                    : "${group?.membersCount} members",
                style: TextStyle(
                  color: Color(0xFF727272),
                  fontSize: 14,
                  fontWeight: FontWeight.w400,
                ),
              ),
              tailView: CometChatUIKit.getDataSource()
                  .getAuxiliaryHeaderMenu(context, user, group, null),
              style: ListItemStyle(
                titleStyle: TextStyle(
                  color: Color(0xFF141414),
                  fontSize: 16,
                  fontWeight: FontWeight.w500,
                ),
              ),
            );
          },
        ); // Replaced the placeholder with a custom widget.
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/IOPdWrN4_rrt5FC1/images/f287ed44-message_header_list_item_view-e8970c41a03ad8888016135bff5c01b8.png?fit=max&auto=format&n=IOPdWrN4_rrt5FC1&q=85&s=b145183c44524a554a15b62f77ef24d2" width="2560" height="480" data-path="images/f287ed44-message_header_list_item_view-e8970c41a03ad8888016135bff5c01b8.png" />
</Frame>

***

#### leadingStateView

Defines a custom leading view, typically used for the receiver's profile picture or avatar.

Use Cases:

* Display a circular profile picture with a status indicator.
* Add a custom badge for special roles (Admin, Verified ✅).

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
       leadingStateView: (group, user, context) {
        // return leading view 
      },
    )
    ```
  </Tab>
</Tabs>

***

#### SubtitleView

You can customize the subtitle widget for each item to meet your specific preferences and needs.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
      CometChatMessageHeader(
          user: user,
          subtitleView: (group, user, context) {
            String subtitle;
            if (group != null) {
              subtitle = "${group.membersCount} . ${group.description}";
            } else {
              subtitle = user?.status ?? '';
            }
            return Text(
              subtitle,
              style: TextStyle(
                fontSize: 12,
                fontWeight: FontWeight.w400,
                color: Color(0XFF727272),
              ),
            );
          },
        )
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/skyYyiTRS367pk0g/images/8d83bdba-message_header_subtitle_view-f6f7143f2b8a079836a2c41ad65209a3.png?fit=max&auto=format&n=skyYyiTRS367pk0g&q=85&s=4f072838c2aa854620ec072d6f670545" width="2560" height="480" data-path="images/8d83bdba-message_header_subtitle_view-f6f7143f2b8a079836a2c41ad65209a3.png" />
</Frame>

***

#### trailingView

You can set the Custom `trailingView` to the `CometChatMessageHeader` widget.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
      user: user,
      trailingView: (User? user, Group? group, BuildContext context) {
        return [
          IconButton(
                    onPressed: () {},
                    icon: Icon(
                      Icons.info_outline,
                      color: Color(0xFF141414),
                    ),
               )
        ];
      },
    )
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/ASAuj03ZuUm-dFU-/images/0870fced-message_header_menu-3df95b4bbd62c35c57b5d7c33df33dfc.png?fit=max&auto=format&n=ASAuj03ZuUm-dFU-&q=85&s=5b5506bd4355327cc3d6649ffc584150" width="2560" height="480" data-path="images/0870fced-message_header_menu-3df95b4bbd62c35c57b5d7c33df33dfc.png" />
</Frame>

***

#### BackIcon

You can customize the Back Icon according to your specific requirements by using the `.backButton` method.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    CometChatMessageHeader(
      user: user,
      backButton: (context) {
        return IconButton(
          icon: Icon(Icons.add_alert_outlined, color: Color(0xFF6851D6)),
          onPressed: () {
            // Navigator.pop(context);
          },
        );
      },
    )
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="Android">
    <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/yj8hatI1RYHMwVPT/images/aca79061-message_header_set_back_button_cometchat_screens-eab6d2813ae0b502581c7f1f6da43292.png?fit=max&auto=format&n=yj8hatI1RYHMwVPT&q=85&s=27ee7e82ee39cb60a921f8de71f7c674" alt="Image" width="4498" height="3120" data-path="images/aca79061-message_header_set_back_button_cometchat_screens-eab6d2813ae0b502581c7f1f6da43292.png" />
  </Tab>

  <Tab title="iOS">
    <img src="https://mintcdn.com/cometchat-22654f5b-feature-react-native-sdk-quotedmessage-a/8EmfxiO8VFkbp4xi/images/efec3ff1-message_header_set_back_button_cometchat_screens-99dc6f800eaa7e1fcf9ee298ffbbc5d3.png?fit=max&auto=format&n=8EmfxiO8VFkbp4xi&q=85&s=dfdb1459bc21354484583f8596e7e3db" alt="Image" width="4498" height="3120" data-path="images/efec3ff1-message_header_set_back_button_cometchat_screens-99dc6f800eaa7e1fcf9ee298ffbbc5d3.png" />
  </Tab>
</Tabs>

***
