diff --git a/lib/helpers/conversations_helper.dart b/lib/helpers/conversations_helper.dart index 8662c48..22f5154 100644 --- a/lib/helpers/conversations_helper.dart +++ b/lib/helpers/conversations_helper.dart @@ -49,6 +49,15 @@ class ConversationsHelper { return response.getObject()["conversationID"]; } + /// Add a member to a conversation. + /// + /// Throws in case of failure + static Future addMember(int convID, int userID) async => + await APIRequest.withLogin("conversations/addMember") + .addInt("convID", convID) + .addInt("userID", userID) + .execWithThrow(); + /// Remove a member from a conversation. /// /// Throws in case of failure diff --git a/lib/ui/screens/update_conversation_screen.dart b/lib/ui/screens/update_conversation_screen.dart index 1f9a21d..0086733 100644 --- a/lib/ui/screens/update_conversation_screen.dart +++ b/lib/ui/screens/update_conversation_screen.dart @@ -166,14 +166,11 @@ class _UpdateConversationScreen extends State { // Add a member to the conversation PickUserWidget( - resetOnChoose: true, - keepFocusOnChoose: true, - label: tr("Add member"), - enabled: _canAddMembers, - onSelectUser: (user) => setState(() { - if (!_members.contains(user)) _members.insert(0, user); - }), - ), + resetOnChoose: true, + keepFocusOnChoose: true, + label: tr("Add member"), + enabled: _canAddMembers, + onSelectUser: (user) => _addMember(user)), //Conversation members Column( @@ -229,6 +226,20 @@ class _UpdateConversationScreen extends State { } } + void _addMember(User user) async { + try { + if (_members.contains(user)) return; + + if (isUpdating) + await ConversationsHelper.addMember(_conversation.id, user.id); + + setState(() => _members.insert(0, user)); + } catch (e, s) { + logError(e, s); + snack(context, tr("Failed to add member to conversation!")); + } + } + void _removeMember(User user) async { try { if (isUpdating)