2 Commits

Author SHA1 Message Date
0c676dc3d6 made perticipants list stateless 2025-06-23 17:54:12 +02:00
c44b0464a4 sorted participants list alphabetically 2025-06-10 20:19:44 +02:00
3 changed files with 39 additions and 51 deletions

View File

@@ -3,26 +3,28 @@ import 'package:flutter/material.dart';
import '../../../../../api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart'; import '../../../../../api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart';
import '../../../../../widget/userAvatar.dart'; import '../../../../../widget/userAvatar.dart';
class ParticipantsListView extends StatefulWidget { class ParticipantsListView extends StatelessWidget {
final GetParticipantsResponse participantsResponse; final GetParticipantsResponse participantsResponse;
const ParticipantsListView(this.participantsResponse, {super.key}); const ParticipantsListView(this.participantsResponse, {super.key});
@override @override
State<ParticipantsListView> createState() => _ParticipantsListViewState(); Widget build(BuildContext context) {
} final participants = participantsResponse.data.map((participant) => ListTile(
leading: UserAvatar(id: participant.actorId),
title: Text(participant.displayName),
subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null,
)).toList();
class _ParticipantsListViewState extends State<ParticipantsListView> { lastname(participant) => participant.title.toString().split(' ').last;
@override participants.sort((a, b) => lastname(a).compareTo(lastname(b)));
Widget build(BuildContext context) => Scaffold(
return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('Teilnehmende'), title: const Text('Teilnehmende'),
), ),
body: ListView( body: ListView(
children: widget.participantsResponse.data.map((participant) => ListTile( children: participants,
leading: UserAvatar(id: participant.actorId),
title: Text(participant.displayName),
subtitle: participant.statusMessage != null ? Text(participant.statusMessage!) : null,
)).toList(),
), ),
); );
} }
}

View File

@@ -206,7 +206,7 @@ class _ChatBubbleState extends State<ChatBubble> with SingleTickerProviderStateM
), ),
), ),
Visibility( Visibility(
visible: widget.bubbleData.message != '{file}', visible: !message.containsFile,
child: ListTile( child: ListTile(
leading: const Icon(Icons.copy), leading: const Icon(Icons.copy),
title: const Text('Nachricht kopieren'), title: const Text('Nachricht kopieren'),

View File

@@ -21,29 +21,22 @@ class ChatMessage {
ChatMessage({required this.originalMessage, this.originalData}) { ChatMessage({required this.originalMessage, this.originalData}) {
if(originalData?.containsKey('file') ?? false) { if(originalData?.containsKey('file') ?? false) {
file = originalData?['file']; file = originalData?['file'];
} content = file?.name ?? 'Datei';
} else {
content = RichObjectStringProcessor.parseToString(originalMessage, originalData); content = RichObjectStringProcessor.parseToString(originalMessage, originalData);
} }
}
Widget getWidget() { Widget getWidget() {
var contentWidget = Linkify( if(file == null) {
return Linkify(
text: content, text: content,
onOpen: onOpen, onOpen: onOpen,
); );
}
if(file == null) return contentWidget; return Padding(padding: const EdgeInsets.only(top: 5), child: CachedNetworkImage(
return Padding(
padding: const EdgeInsets.only(top: 5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
CachedNetworkImage(
errorWidget: (context, url, error) => Row( errorWidget: (context, url, error) => Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
@@ -60,14 +53,7 @@ class ChatMessage {
fadeOutDuration: Duration.zero, fadeOutDuration: Duration.zero,
errorListener: (value) {}, errorListener: (value) {},
imageUrl: 'https://${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().full()}/index.php/core/preview?fileId=${file!.id}&x=100&y=-1&a=1', imageUrl: 'https://${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().full()}/index.php/core/preview?fileId=${file!.id}&x=100&y=-1&a=1',
) ));
],
),
SizedBox(height: 5),
contentWidget
],
)
);
} }
Future<void> onOpen(LinkableElement link) async { Future<void> onOpen(LinkableElement link) async {