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:
- Approval required: Returns code
25424. Both the applicant and the owner/admins receiveGroupChannelHandler.onGroupApplicationEvent. - 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 permission | Inviter role | Invitee approval | Flow |
|---|---|---|---|
| Owner/admin approval | Member | Required | Owner approves, then invitee approves |
| Owner/admin approval | Member | Not required | Owner approves, invitee joins |
| Owner/admin approval | Owner/admin | Required | Invitee approves |
| Owner/admin approval | Owner/admin | Not required | Invitee joins directly |
| No approval | Any | Required | Invitee approves |
| No approval | Any | Not required | Invitee 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}');
}
});