From ab3a9ca19033c583e6f4d6cf1ebb2e634a9d9f05 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 27 Jan 2026 11:53:42 -0500 Subject: [PATCH] fix: account for smaller screens --- .../activity_participant_list.dart | 112 +++++++++++------- 1 file changed, 69 insertions(+), 43 deletions(-) diff --git a/lib/pangea/activity_sessions/activity_participant_list.dart b/lib/pangea/activity_sessions/activity_participant_list.dart index b22ef99df..a29c3f23a 100644 --- a/lib/pangea/activity_sessions/activity_participant_list.dart +++ b/lib/pangea/activity_sessions/activity_participant_list.dart @@ -52,53 +52,79 @@ class ActivityParticipantList extends StatelessWidget { spacing: 12.0, mainAxisSize: MainAxisSize.min, children: [ - Row( - spacing: 8.0, - mainAxisAlignment: MainAxisAlignment.center, - children: availableRoles.map((availableRole) { - final selected = - isSelected != null ? isSelected!(availableRole.id) : false; + LayoutBuilder( + builder: (context, constraints) { + const minItemWidth = 125.0; - final assignedRole = assignedRoles[availableRole.id] ?? - (selected - ? ActivityRoleModel( - id: availableRole.id, - userId: Matrix.of(context).client.userID!, - role: availableRole.name, - ) - : null); + final rows = (availableRoles.length / + (constraints.maxWidth / minItemWidth)) + .ceil(); - final User? user = participants.participants.firstWhereOrNull( - (u) => u.id == assignedRole?.userId, - ) ?? - course?.getParticipants().firstWhereOrNull( - (u) => u.id == assignedRole?.userId, + final entriesPerRow = (availableRoles.length / rows).ceil(); + + return Column( + spacing: 8.0, + children: List.generate(rows, (rowIndex) { + final entries = availableRoles + .skip(rowIndex * entriesPerRow) + .take(entriesPerRow) + .toList(); + + return Row( + spacing: 8.0, + mainAxisAlignment: MainAxisAlignment.center, + children: entries.map((availableRole) { + final selected = isSelected != null + ? isSelected!(availableRole.id) + : false; + + final assignedRole = assignedRoles[availableRole.id] ?? + (selected + ? ActivityRoleModel( + id: availableRole.id, + userId: Matrix.of(context).client.userID!, + role: availableRole.name, + ) + : null); + + final User? user = + participants.participants.firstWhereOrNull( + (u) => u.id == assignedRole?.userId, + ) ?? + course?.getParticipants().firstWhereOrNull( + (u) => u.id == assignedRole?.userId, + ); + + final selectable = canSelect != null + ? canSelect!(availableRole.id) + : true; + + final shimmering = isShimmering != null + ? isShimmering!(availableRole.id) + : false; + + return Expanded( + child: ActivityParticipantIndicator( + name: availableRole.name, + userId: assignedRole?.userId, + opacity: getOpacity != null + ? getOpacity!(assignedRole) + : 1.0, + user: user, + onTap: onTap != null && selectable + ? () => onTap!(availableRole.id) + : null, + selected: selected, + selectable: selectable, + shimmer: shimmering, + room: room, + ), ); - - final selectable = - canSelect != null ? canSelect!(availableRole.id) : true; - - final shimmering = isShimmering != null - ? isShimmering!(availableRole.id) - : false; - - return Expanded( - child: ActivityParticipantIndicator( - name: availableRole.name, - userId: assignedRole?.userId, - opacity: - getOpacity != null ? getOpacity!(assignedRole) : 1.0, - user: user, - onTap: onTap != null && selectable - ? () => onTap!(availableRole.id) - : null, - selected: selected, - selectable: selectable, - shimmer: shimmering, - room: room, - ), + }).toList(), + ); + }), ); - }).toList(), + }, ), Wrap( alignment: WrapAlignment.center,