createGroup method
Creates a new group room.
Implementation
Future<ChatResult<String>> createGroup({
required String name,
required List<String> memberIds,
Uint8List? avatarBytes,
String? avatarMimeType,
String? subject,
bool allowInvitations = false,
RoomAudience audience = RoomAudience.contacts,
Map<String, dynamic>? custom,
}) async {
String? avatarUrl;
if (avatarBytes != null && avatarMimeType != null) {
final uploadRes = await _a.uploadAvatar(
avatarBytes,
avatarMimeType,
AvatarKind.room,
);
if (uploadRes.isFailure) {
return _a._emitFailure(
uploadRes.castFailure<String>(),
OperationKind.createGroupRoom,
);
}
avatarUrl = uploadRes.dataOrNull;
}
final createRes = await _a.client.rooms.create(
audience: audience,
allowInvitations: allowInvitations,
members: memberIds,
name: name,
subject: subject,
avatarUrl: avatarUrl,
custom: custom,
);
if (createRes.isFailure) {
return _a._emitFailure(
createRes.castFailure<String>(),
OperationKind.createGroupRoom,
);
}
final room = createRes.dataOrNull;
if (room == null || room.id.isEmpty) {
return _a._emitFailure(
const ChatFailureResult<String>(
UnexpectedFailure('create room returned empty id'),
),
OperationKind.createGroupRoom,
);
}
// Refresh the room list so the new entry surfaces immediately rather
// than waiting for the `room_created` WS echo.
unawaited(load());
return ChatSuccess(room.id);
}