Skip to main content

Manage membership requests

Prerequisites

The managed hosting service is enabled by default.

Join a group

Call group.join() to join a group. The result depends on the group's joinPermission:

  1. Approval required: Returns code 25424. Both the applicant and the owner/admins receive GroupChannelHandler.onGroupApplicationEvent.
  2. No approval required: Returns 0 (success).
Dart
final group = GroupChannel('groupId');
await group.join((code, error) {
if (error == null) {
print('Joined group');
}
});

Invite users

Call group.inviteUsers() to invite users. The behavior depends on invitePermission, the inviter's role, and inviteHandlePermission.

Dart
await group.inviteUsers(['userId1', 'userId2'], (code, error) {
print('Invited users, code: $code');
});

Invitation flow rules

Join permissionInviter roleInvitee approvalFlow
Owner/admin approvalMemberRequiredOwner approves, then invitee approves
Owner/admin approvalMemberNot requiredOwner approves, invitee joins
Owner/admin approvalOwner/adminRequiredInvitee approves
Owner/admin approvalOwner/adminNot requiredInvitee joins directly
No approvalAnyRequiredInvitee approves
No approvalAnyNot requiredInvitee joins directly

Handle invitations

Accept an invitation

Dart
await group.acceptInvite('<inviter-user-id>', (error) {
if (error == null) {
print('Invitation accepted');
}
});

Decline an invitation

Dart
await group.refuseInvite(
RefuseInviteParams(inviterId: '<inviter-user-id>', reason: 'Not interested'),
(error) {
print('Invitation declined');
},
);

Handle join applications (owner/admin)

Join applications expire after 7 days.

Accept an application

Dart
await group.acceptApplication(
AcceptApplicationParams(inviterId: '<inviter-id>', applicantId: '<applicant-id>'),
(int? code, NCError? error) {
if (error == null) print('Application accepted');
},
);

Decline an application

Dart
await group.refuseApplication(
RefuseApplicationParams(inviterId: '<inviter-id>', applicantId: '<applicant-id>', reason: 'Not applicable'),
(error) {
print('Application declined');
},
);

Get application list (paginated)

Dart
final query = GroupChannel.createGroupApplicationsQuery(
GroupApplicationsQueryParams(
directions: [GroupApplicationDirection.applicationreceived],
status: [GroupApplicationStatus.managerunhandled],
pageSize: 20,
),
);

await query.loadNextPage((result, error) {
if (error == null) {
print('Applications: ${result?.data}');
}
});