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

# Change Member Scope

> Learn how to change group member roles (admin, moderator, participant) and receive real-time scope change events using the CometChat Flutter SDK.

<Accordion title="AI Integration Quick Reference">
  ```dart theme={null}
  // Change member scope to admin
  CometChat.updateGroupMemberScope(
    guid: "GROUP_ID",
    uid: "USER_ID",
    scope: CometChatMemberScope.admin,
    onSuccess: (String message) => debugPrint("Scope updated: $message"),
    onError: (CometChatException e) => debugPrint("Error: ${e.message}"),
  );

  // Listen for scope change events
  CometChat.addGroupListener("listener_id", GroupListenerImpl());

  // Scopes: CometChatMemberScope.admin, .moderator, .participant
  ```
</Accordion>

Promote or demote group members between admin, moderator, and participant roles. Only admins can change member scopes, and only the group owner can change admin scopes.

## Change Scope of a Group Member

Use `updateGroupMemberScope()` to change a member's role within a [Group](/sdk/reference/entities#group).

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

<Tabs>
  <Tab title="Dart">
    ```dart theme={null}
    String UID = "UID";
    String GUID = "GUID";
    String scope = CometChatMemberScope.admin;

    CometChat.updateGroupMemberScope(guid: GUID, uid: UID, scope: scope,
            onSuccess: (String message) {
              debugPrint("Group Member Scope Changed Successfully : $message");
            },
            onError: (CometChatException e) {
              debugPrint("Group Member Scope Change failed : ${e.message}");
            });
    ```
  </Tab>
</Tabs>

This method takes the below parameters:

| Parameter   | Type                           | Description                                                                                                              |
| ----------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| `guid`      | `String`                       | The GUID of the group for which the member's scope needs to be changed                                                   |
| `uid`       | `String`                       | The UID of the member whose scope you would like to change                                                               |
| `scope`     | `String`                       | The updated scope: `CometChatMemberScope.admin`, `CometChatMemberScope.moderator`, or `CometChatMemberScope.participant` |
| `onSuccess` | `Function(String)`             | Callback triggered on successful scope change                                                                            |
| `onError`   | `Function(CometChatException)` | Callback triggered on error                                                                                              |

The default scope of any member is `participant`. Only the **Admin** of the group can change the scope of any participant in the group.

<Accordion title="Response">
  **On Success** — A `String` message confirming the scope change:

  <span id="update-member-scope-message" style={{scrollMarginTop: '100px'}} />

  | Parameter | Type   | Description                  | Sample Value                                    |
  | --------- | ------ | ---------------------------- | ----------------------------------------------- |
  | `message` | string | Success confirmation message | `"cometchat-guid-1 scope changed successfully"` |
</Accordion>

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

  | Parameter | Type   | Description                  | Sample Value                                                         |
  | --------- | ------ | ---------------------------- | -------------------------------------------------------------------- |
  | `code`    | string | Error code identifier        | `"ERR_NOT_A_MEMBER"`                                                 |
  | `message` | string | Human-readable error message | `"The user is not a member of this group."`                          |
  | `details` | string | Additional technical details | `"Cannot change scope for a user who is not a member of the group."` |
</Accordion>

## Real-Time Group Member Scope Changed Events

Implement `onGroupMemberScopeChanged()` in `GroupListener` to receive real-time notifications when a member's scope changes.

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

    //CometChat.addGroupListener("group_Listener_id", this);
    @override
    void onGroupMemberScopeChanged(Action action, User updatedBy, User updatedUser, String scopeChangedTo, String scopeChangedFrom, Group group) {
      print("onGroupMemberScopeChanged ");

    }
    }
    ```
  </Tab>
</Tabs>

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

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

## Missed Group Member Scope Changed Events

When fetching previous messages, scope changes appear as [Action](/sdk/reference/messages#action) messages (a subclass of `BaseMessage`).

| Field       | Value/Type                             | Description                    |
| ----------- | -------------------------------------- | ------------------------------ |
| `action`    | `"scopeChanged"`                       | The action type                |
| `actionOn`  | [User](/sdk/reference/entities#user)   | The user whose scope changed   |
| `actionBy`  | [User](/sdk/reference/entities#user)   | The user who changed the scope |
| `actionFor` | [Group](/sdk/reference/entities#group) | The group                      |
| `oldScope`  | `String`                               | The previous scope             |
| `newScope`  | `String`                               | The new scope                  |

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Transfer Group Ownership" icon="arrow-right-arrow-left" href="/sdk/flutter/transfer-group-ownership">
    Transfer ownership of a group to another member
  </Card>

  <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="Add Members" icon="user-plus" href="/sdk/flutter/group-add-members">
    Add new members to a group
  </Card>

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