[GroupInfoScreen] Show chat owner always on top of the member list

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-01-08 14:33:53 +05:30
parent 91feed9bac
commit b9f5dc395c
+20 -14
View File
@@ -169,12 +169,18 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
} }
Widget _buildMembers(List<Member> members) { Widget _buildMembers(List<Member> members) {
int groupMemberListLength; final groupMembers = members
..sort((prev, curr) {
if (curr.role == 'owner') return 1;
return 0;
});
int groupMembersLength;
if (listExpanded) { if (listExpanded) {
groupMemberListLength = members.length; groupMembersLength = groupMembers.length;
} else { } else {
groupMemberListLength = members.length > 6 ? 6 : members.length; groupMembersLength = groupMembers.length > 6 ? 6 : groupMembers.length;
} }
return Column( return Column(
@@ -182,15 +188,15 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
ListView.builder( ListView.builder(
shrinkWrap: true, shrinkWrap: true,
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
itemCount: groupMemberListLength, itemCount: groupMembersLength,
itemBuilder: (context, position) { itemBuilder: (context, index) {
final member = groupMembers[index];
return Material( return Material(
child: InkWell( child: InkWell(
onTap: () { onTap: () {
var userMember = members.firstWhere( var userMember = groupMembers.firstWhere(
(e) => e.user.id == StreamChat.of(context).user.id); (e) => e.user.id == StreamChat.of(context).user.id);
_showUserInfoModal( _showUserInfoModal(member.user, userMember.role == 'owner');
members[position].user, userMember.role == 'owner');
}, },
child: Container( child: Container(
height: 65.0, height: 65.0,
@@ -202,7 +208,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
horizontal: 8.0, vertical: 12.0), horizontal: 8.0, vertical: 12.0),
child: UserAvatar( child: UserAvatar(
user: members[position].user, user: member.user,
constraints: BoxConstraints( constraints: BoxConstraints(
maxHeight: 40.0, maxWidth: 40.0), maxHeight: 40.0, maxWidth: 40.0),
), ),
@@ -213,14 +219,14 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
members[position].user.name, member.user.name,
style: TextStyle(fontWeight: FontWeight.bold), style: TextStyle(fontWeight: FontWeight.bold),
), ),
SizedBox( SizedBox(
height: 1.0, height: 1.0,
), ),
Text( Text(
_getLastSeen(members[position].user), _getLastSeen(member.user),
style: TextStyle( style: TextStyle(
color: StreamChatTheme.of(context) color: StreamChatTheme.of(context)
.colorTheme .colorTheme
@@ -233,7 +239,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text( child: Text(
members[position].role == 'owner' ? 'Owner' : '', member.role == 'owner' ? 'Owner' : '',
style: TextStyle( style: TextStyle(
color: StreamChatTheme.of(context) color: StreamChatTheme.of(context)
.colorTheme .colorTheme
@@ -257,7 +263,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
); );
}, },
), ),
if (groupMemberListLength != members.length) if (groupMembersLength != groupMembers.length)
InkWell( InkWell(
onTap: () { onTap: () {
setState(() { setState(() {
@@ -287,7 +293,7 @@ class _GroupInfoScreenState extends State<GroupInfoScreen> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
'${members.length - groupMemberListLength} more', '${members.length - groupMembersLength} more',
style: TextStyle( style: TextStyle(
color: StreamChatTheme.of(context) color: StreamChatTheme.of(context)
.colorTheme .colorTheme