grouped the participants list

This commit is contained in:
2025-06-24 14:18:14 +02:00
parent 0a66858d93
commit 421ee9179d
3 changed files with 41 additions and 15 deletions

View File

@ -55,12 +55,15 @@ class GetParticipantsResponseObject {
} }
enum GetParticipantsResponseObjectParticipantType { enum GetParticipantsResponseObjectParticipantType {
@JsonValue(1) owner, @JsonValue(1) owner('Besitzer'),
@JsonValue(2) moderator, @JsonValue(2) moderator('Moderator'),
@JsonValue(3) user, @JsonValue(3) user('Benutzer'),
@JsonValue(4) guest, @JsonValue(4) guest('Gast'),
@JsonValue(5) userFollowingPublicLink, @JsonValue(5) userFollowingPublicLink('Link Nutzer'),
@JsonValue(6) guestWithModeratorPermissions @JsonValue(6) guestWithModeratorPermissions('Gast Moderator');
const GetParticipantsResponseObjectParticipantType(this.prettyName);
final String prettyName;
} }
enum GetParticipantsResponseObjectParticipantsInCallFlags { enum GetParticipantsResponseObjectParticipantsInCallFlags {

View File

@ -1,3 +1,4 @@
import 'package:collection/collection.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../../../api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart'; import '../../../../../api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart';
@ -9,22 +10,43 @@ class ParticipantsListView extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final participants = participantsResponse.data.map((participant) => ListTile( // final participants = participantsResponse.data.map((participant) => ListTile(
leading: UserAvatar(id: participant.actorId), // leading: UserAvatar(id: participant.actorId),
title: Text(participant.displayName), // title: Text(participant.displayName),
subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null, // subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null,
)).toList(); // )).toList();
lastname(participant) => participant.title.toString().split(' ').last; lastname(participant) => participant.displayName.toString().split(' ').last;
participants.sort((a, b) => lastname(a).compareTo(lastname(b)));
final participants = participantsResponse.data
.sorted((a, b) => lastname(a).compareTo(lastname(b)))
.sorted((a, b) => a.participantType.index.compareTo(b.participantType.index));
var groupedParticipants = participants.groupListsBy((participant) => participant.participantType);
// Map<GetParticipantsResponseObjectParticipantType, List<GetParticipantsResponseObject>>
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('Teilnehmende'), title: const Text('Teilnehmende'),
), ),
body: ListView( body: ListView(
children: participants, children: [
), ...groupedParticipants.entries.map((entry) => Column(
children: [
ListTile(
title: Text(entry.key.prettyName),
titleTextStyle: TextStyle(fontWeight: FontWeight.bold),
),
...entry.value.map((participant) => ListTile(
leading: UserAvatar(id: participant.actorId),
title: Text(participant.displayName),
subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null,
)),
Divider(),
],
))
],
)
); );
} }
} }

View File

@ -101,6 +101,7 @@ dependencies:
time_range_picker: ^2.3.0 time_range_picker: ^2.3.0
url_launcher: ^6.3.1 url_launcher: ^6.3.1
uuid: ^4.5.1 uuid: ^4.5.1
collection: ^1.19.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: