diff --git a/packages/simplex_app/lib/views/conversation/group_detail_conversation.dart b/packages/simplex_app/lib/views/conversation/group_detail_conversation.dart index d294bd5cfd..8ba9f691c5 100644 --- a/packages/simplex_app/lib/views/conversation/group_detail_conversation.dart +++ b/packages/simplex_app/lib/views/conversation/group_detail_conversation.dart @@ -6,6 +6,8 @@ import 'package:simplex_chat/constants.dart'; import 'package:simplex_chat/model/contact.dart'; import 'package:simplex_chat/model/group.dart'; +enum MemberSetting { owner, admin, member } + class GroupDetailsConversation extends StatefulWidget { final Group group; const GroupDetailsConversation({Key? key, required this.group}) @@ -17,6 +19,8 @@ class GroupDetailsConversation extends StatefulWidget { } class _GroupDetailsConversationState extends State { + MemberSetting _memberSetting = MemberSetting.member; + bool _addMember = false; List _contactsList = []; // for storing contacts List _newMembers = []; @@ -157,13 +161,10 @@ class _GroupDetailsConversationState extends State { ), title: Text(_members[i]), trailing: InkWell( - onTap: () => _removeMember(_members[i]), + onTap: () => _memberSettings(_members[i]), child: const Padding( padding: EdgeInsets.all(8.0), - child: Icon( - Icons.delete, - color: Colors.red, - ), + child: Icon(Icons.settings), ), ), ) @@ -180,6 +181,75 @@ class _GroupDetailsConversationState extends State { ); } + void _memberSettings(String contact) { + showDialog( + context: context, + builder: (context) => StatefulBuilder( + builder: (context, setState) => AlertDialog( + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Spacer(), + const Expanded(child: Text('Owner')), + Radio( + value: MemberSetting.owner, + groupValue: _memberSetting, + onChanged: (MemberSetting? value) { + setState(() { + _memberSetting = value!; + }); + }), + const Spacer(), + ], + ), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Spacer(), + const Expanded(child: Text('Admin')), + Radio( + groupValue: _memberSetting, + value: MemberSetting.admin, + onChanged: (MemberSetting? value) { + setState(() { + _memberSetting = value!; + }); + }), + const Spacer(), + ], + ), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Spacer(), + const Expanded(child: Text('Member')), + Radio( + groupValue: _memberSetting, + value: MemberSetting.member, + onChanged: (MemberSetting? value) { + setState(() { + _memberSetting = value!; + }); + }), + const Spacer(), + ], + ), + const Divider(), + TextButton( + onPressed: () => _removeMember(contact), + child: const Text('Remove from group', + style: TextStyle(color: Colors.red)), + ), + ], + ), + ), + ), + ); + } + void _addNewMembers() async { SharedPreferences prefs = await SharedPreferences.getInstance(); // add new members to the _members list @@ -221,6 +291,8 @@ class _GroupDetailsConversationState extends State { void _removeMember(String contact) async { SharedPreferences prefs = await SharedPreferences.getInstance(); + Navigator.pop(context); + // remove the current member setState(() { _members.remove(contact);