import 'package:Envelope/components/custom_circle_avatar.dart'; import 'package:Envelope/views/main/conversation/edit_details.dart'; import 'package:flutter/material.dart'; import '/models/conversation_users.dart'; import '/models/conversations.dart'; import '/models/my_profile.dart'; import '/views/main/conversation/settings_user_list_item.dart'; class ConversationSettings extends StatefulWidget { final Conversation conversation; const ConversationSettings({ Key? key, required this.conversation, }) : super(key: key); @override State createState() => _ConversationSettingsState(); } class _ConversationSettingsState extends State { List users = []; MyProfile? profile; TextEditingController nameController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( elevation: 0, automaticallyImplyLeading: false, flexibleSpace: SafeArea( child: Container( padding: const EdgeInsets.only(right: 16), child: Row( children: [ IconButton( onPressed: (){ Navigator.pop(context); }, icon: const Icon(Icons.arrow_back), ), const SizedBox(width: 2,), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( widget.conversation.name + " Settings", style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w600 ), ), ], ), ), ], ), ), ), ), body: Padding( padding: const EdgeInsets.all(15), child: Column( children: [ const SizedBox(height: 30), conversationName(), const SizedBox(height: 25), widget.conversation.admin ? sectionTitle('Settings') : const SizedBox.shrink(), widget.conversation.admin ? settings() : const SizedBox.shrink(), widget.conversation.admin ? const SizedBox(height: 25) : const SizedBox.shrink(), sectionTitle('Members'), usersList(), const SizedBox(height: 25), myAccess(), ], ), ), ); } Widget conversationName() { return Row( children: [ const CustomCircleAvatar( icon: Icon(Icons.people, size: 40), imagePath: null, // TODO: Add image here radius: 30, ), const SizedBox(width: 10), Text( widget.conversation.name, style: const TextStyle( fontSize: 25, fontWeight: FontWeight.w500, ), ), widget.conversation.admin ? IconButton( iconSize: 20, icon: const Icon(Icons.edit), padding: const EdgeInsets.all(5.0), splashRadius: 25, onPressed: () { Navigator.of(context).push( MaterialPageRoute(builder: (context) => ConversationEditDetails( users: users, conversation: widget.conversation, friends: null, )), ).then(onGoBack); }, ) : const SizedBox.shrink(), ], ); } Future getUsers() async { users = await getConversationUsers(widget.conversation); profile = await MyProfile.getProfile(); setState(() {}); } @override void initState() { nameController.text = widget.conversation.name; super.initState(); getUsers(); } Widget myAccess() { return Align( alignment: Alignment.centerLeft, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ TextButton.icon( label: const Text( 'Leave Conversation', style: TextStyle(fontSize: 16) ), icon: const Icon(Icons.exit_to_app), style: const ButtonStyle( alignment: Alignment.centerLeft, ), onPressed: () { print('Leave Group'); } ), ], ), ); } Widget sectionTitle(String title) { return Align( alignment: Alignment.centerLeft, child: Container( padding: const EdgeInsets.only(left: 12), child: Text( title, style: const TextStyle(fontSize: 20), ), ), ); } Widget settings() { return Align( alignment: Alignment.centerLeft, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const SizedBox(height: 5), TextButton.icon( label: const Text( 'Disappearing Messages', style: TextStyle(fontSize: 16) ), icon: const Icon(Icons.timer), style: ButtonStyle( alignment: Alignment.centerLeft, foregroundColor: MaterialStateProperty.resolveWith( (Set states) { return Theme.of(context).colorScheme.onBackground; }, ) ), onPressed: () { print('Disappearing Messages'); } ), TextButton.icon( label: const Text( 'Permissions', style: TextStyle(fontSize: 16) ), icon: const Icon(Icons.lock), style: ButtonStyle( alignment: Alignment.centerLeft, foregroundColor: MaterialStateProperty.resolveWith( (Set states) { return Theme.of(context).colorScheme.onBackground; }, ) ), onPressed: () { print('Permissions'); } ), ], ), ); } Widget usersList() { return ListView.builder( itemCount: users.length, shrinkWrap: true, padding: const EdgeInsets.only(top: 5, bottom: 0), itemBuilder: (context, i) { return ConversationSettingsUserListItem( user: users[i], isAdmin: widget.conversation.admin, profile: profile!, // TODO: Fix this ); } ); } onGoBack(dynamic value) async { nameController.text = widget.conversation.name; super.initState(); getUsers(); setState(() {}); } }