> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-platform-docs-release.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Add Members To A Group

> Learn how to add members to a group, receive real-time member added events, and handle missed events using the CometChat Flutter SDK.

<Accordion title="AI Integration Quick Reference">
  ```dart theme={null}
  // Add members to a group
  List<GroupMember> members = [
    GroupMember.fromUid(uid: "UID", scope: CometChatMemberScope.participant, name: "User 1"),
  ];

  CometChat.addMembersToGroup(
    guid: "GUID",
    groupMembers: members,
    onSuccess: (Map<String?, String?> result) {
      debugPrint("Members added: $result");
    },
    onError: (CometChatException e) {
      debugPrint("Error: ${e.message}");
    },
  );

  // Listen for member added events
  class MyGroupListener with GroupListener {
    @override
    void onMemberAddedToGroup(Action action, User addedby, User userAdded, Group addedTo) {
      debugPrint("Member added: ${userAdded.name}");
    }
  }
  CometChat.addGroupListener("listenerId", MyGroupListener());
  ```
</Accordion>

Add users to a group programmatically. Only admins and moderators can add members. The added users receive a notification and are immediately part of the group.

## Add Members to Group

<Note>
  **Available via:** SDK | [REST API](https://api-explorer.cometchat.com) | [UI Kits](/ui-kit/flutter/overview)
</Note>

Use `addMembersToGroup()` to add members to a [Group](/sdk/flutter/retrieve-groups).

| Parameter      | Type                              | Description                                                                                 |
| -------------- | --------------------------------- | ------------------------------------------------------------------------------------------- |
| `guid`         | `String`                          | The GUID of the group to add members to                                                     |
| `groupMembers` | `List<GroupMember>`               | List of [GroupMember](/sdk/reference/entities#groupmember) objects (UID and scope required) |
| `onSuccess`    | `Function(Map<String?, String?>)` | Callback with a map of UIDs to result status                                                |
| `onError`      | `Function(CometChatException)`    | Callback triggered on failure                                                               |

In order to add members, you need to create an object of the `GroupMember` class. The `UID` and the `scope` of the `GroupMember` are mandatory.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    List<GroupMember> groupMembers = [];
    GroupMember firstMember = GroupMember.fromUid(
    scope: CometChatMemberScope.participant,
    uid: "cometchat-uid-3",name: "name");
    GroupMember secondMember = GroupMember.fromUid(scope: CometChatMemberScope.admin,
    uid: "cometchat-uid-4",name: "name");

    groupMembers = [firstMember, secondMember];

    CometChat.addMembersToGroup( guid: conversationWith,
            groupMembers: groupMembers,
            onSuccess: (Map<String?,String?> result) {
              debugPrint("Group Member added Successfully : $result");
            },
            onError: (CometChatException e) {
              debugPrint("Group Member addition failed with exception: ${e.message}");
            });
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — A `Map<String?, String?>` where each key is the UID of the user and the value is either `"success"` or an error message:

  <span id="add-members-result-map" style={{scrollMarginTop: '100px'}} />

  | Parameter         | Type   | Description                        | Sample Value |
  | ----------------- | ------ | ---------------------------------- | ------------ |
  | `cometchat-uid-3` | string | Result for the first member added  | `"success"`  |
  | `cometchat-uid-4` | string | Result for the second member added | `"success"`  |
</Accordion>

<Accordion title="Error">
  <span id="add-members-error" style={{scrollMarginTop: '100px'}} />

  | Parameter | Type   | Description                  | Sample Value                            |
  | --------- | ------ | ---------------------------- | --------------------------------------- |
  | `code`    | string | Error code identifier        | `"ERR_GUID_NOT_FOUND"`                  |
  | `message` | string | Human-readable error message | `"The specified group does not exist."` |
  | `details` | string | Additional technical details | `"Please provide a valid group GUID."`  |
</Accordion>

In the `onSuccess()` callback, you will receive a `Map` which will contain the `UID` of the users and the value will either be `success` or an error message describing why the operation to add the user to the group failed.

## Real-Time Group Member Added Events

<Note>
  When a group member is added by another member, this event is triggered. When a user joins a group on their own, the joined event is triggered.
</Note>

Implement `onMemberAddedToGroup()` in `GroupListener` to receive real-time notifications when members are added.

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    class Class_Name  with GroupListener {

    //CometChat.addGroupListener("group_Listener_id", this);
    @override
    void onMemberAddedToGroup(Action action, User addedby, User userAdded, Group addedTo) {
      print("onMemberAddedToGroup");
    }
    }
    ```
  </Tab>
</Tabs>

| Callback Parameter | Type     | Description                                       |
| ------------------ | -------- | ------------------------------------------------- |
| `action`           | `Action` | The action object containing details of the event |
| `addedby`          | `User`   | The user who added the member                     |
| `userAdded`        | `User`   | The user who was added to the group               |
| `addedTo`          | `Group`  | The group the member was added to                 |

<Warning>
  Always remove group listeners when they're no longer needed (e.g., in `dispose()`). Failing to remove listeners can cause memory leaks and duplicate event handling.

  ```dart theme={null}
  CometChat.removeGroupListener("group_Listener_id");
  ```
</Warning>

## Missed Member Added Events

When you retrieve the list of previous messages, if a member has been added to any group that the logged-in user is a member of, the list of messages will contain an `Action` message. An `Action` message is a sub-class of `BaseMessage` class.

For the group member added event, in the `Action` object received, the following fields can help you get the relevant information:

| Field       | Value/Type                             | Description                       |
| ----------- | -------------------------------------- | --------------------------------- |
| `action`    | `"added"`                              | The action type                   |
| `actionOn`  | [User](/sdk/reference/entities#user)   | The user who was added            |
| `actionBy`  | [User](/sdk/reference/entities#user)   | The user who added the member     |
| `actionFor` | [Group](/sdk/reference/entities#group) | The group the member was added to |

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Kick & Ban Members" icon="user-slash" href="/sdk/flutter/group-kick-ban-members">
    Remove or ban members from a group
  </Card>

  <Card title="Change Member Scope" icon="user-shield" href="/sdk/flutter/group-change-member-scope">
    Promote or demote group members
  </Card>

  <Card title="Retrieve Group Members" icon="users" href="/sdk/flutter/retrieve-group-members">
    Fetch the list of members in a group
  </Card>

  <Card title="Join a Group" icon="right-to-bracket" href="/sdk/flutter/join-group">
    Allow users to join public or password-protected groups
  </Card>
</CardGroup>
