createGroupWithMembers static method

Future<Group?> createGroupWithMembers({
  1. required Group group,
  2. required List<GroupMember> groupMembers,
  3. List<String> bannedUserIds = const [],
  4. dynamic onSuccess(
    1. Group group
    )?,
  5. dynamic onError(
    1. CometChatException excep
    )?,
})

Creates a group in CometChat along with initial members and returns the created Group.

This method is similar to createGroup but also accepts a list of GroupMember objects to be added during group creation. Additionally, you can pass a list of user IDs to ban immediately using bannedUserIds.

The group parameter should contain required fields like guid, name, and type. If the group type is "password", a password must also be provided.

groupMembers is a list of users to be added to the group with their respective scopes. bannedUserIds is an optional list of users to be banned upon creation.

The result is returned via onSuccess or onError callbacks, and the created Group object is returned on success.

Throws a PlatformException if a platform channel error occurs.

Example:

CometChat.createGroupWithMembers(
  group: Group(guid: "dev-group", name: "Dev Team", type: GroupType.private),
  groupMembers: [
    GroupMember(uid: "user1", scope: GroupMemberScope.admin),
    GroupMember(uid: "user2", scope: GroupMemberScope.participant),
  ],
  bannedUserIds: ["spammer123"],
  onSuccess: (group) => print("Group with members created: ${group.name}"),
  onError: (e) => print("Failed: ${e.message}")
);

Implementation

static Future<Group?> createGroupWithMembers({
  required Group group,
  required List<GroupMember> groupMembers,
  List<String> bannedUserIds = const [],
  Function(Group group)? onSuccess,
  Function(CometChatException excep)? onError,
}) async {
  List<Map<String, dynamic>> groupMemberMapList = [];
  for (var member in groupMembers) {
    groupMemberMapList.add(member.toJson());
  }

  try {
    final result = await channel.invokeMethod('createGroupWithMembers', {
      'guid': group.guid,
      'name': group.name,
      'icon': group.icon,
      'description': group.description,
      'membersCount': group.membersCount,
      'metadata': group.metadata == null || group.metadata!.isEmpty
          ? null
          : json.encode(group.metadata),
      'joinedAt': group.joinedAt == null
          ? null
          : group.joinedAt!.millisecondsSinceEpoch,
      'hasJoined': group.hasJoined,
      'createdAt': group.createdAt == null
          ? null
          : group.createdAt!.millisecondsSinceEpoch,
      'owner': group.owner,
      'updatedAt': group.updatedAt == null
          ? null
          : group.updatedAt!.millisecondsSinceEpoch,
      'tags': group.tags,
      'type': group.type,
      'scope': group.scope,
      'password': group.password,
      'groupMembers': groupMemberMapList,
      'bannedUserIds': bannedUserIds,
    });

    final res = Group.fromMap(result);
    if (onSuccess != null) onSuccess(res);
    return res;
  } on PlatformException catch (p) {
    _errorCallbackHandler(null, p, null, onError);
  } catch (e) {
    _errorCallbackHandler(null, null, e, onError);
  }
  return null;
}