fix: Receipts disappear after reaction

This commit is contained in:
Christian Kußowski 2026-02-15 11:48:38 +01:00
commit 193d68a525
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
2 changed files with 16 additions and 10 deletions

View file

@ -79,7 +79,10 @@ class ChatEventList extends StatelessWidget {
} }
return Column( return Column(
mainAxisSize: .min, mainAxisSize: .min,
children: [SeenByRow(controller), TypingIndicators(controller)], children: [
SeenByRow(timeline: timeline, event: events.first),
TypingIndicators(controller),
],
); );
} }

View file

@ -1,14 +1,16 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/chat/chat.dart';
import 'package:fluffychat/utils/room_status_extension.dart'; import 'package:fluffychat/utils/room_status_extension.dart';
import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
class SeenByRow extends StatelessWidget { class SeenByRow extends StatelessWidget {
final ChatController controller; final Timeline timeline;
const SeenByRow(this.controller, {super.key}); final Event event;
const SeenByRow({super.key, required this.timeline, required this.event});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -16,16 +18,17 @@ class SeenByRow extends StatelessWidget {
const maxAvatars = 7; const maxAvatars = 7;
return StreamBuilder( return StreamBuilder(
stream: controller.room.client.onSync.stream.where( stream: timeline.room.client.onSync.stream.where(
(syncUpdate) => (syncUpdate) =>
syncUpdate.rooms?.join?[controller.room.id]?.ephemeral?.any( syncUpdate.rooms?.join?[timeline.room.id]?.ephemeral?.any(
(ephemeral) => ephemeral.type == 'm.receipt', (ephemeral) => ephemeral.type == 'm.receipt',
) ?? ) ??
false, false,
), ),
builder: (context, asyncSnapshot) { builder: (context, asyncSnapshot) {
final seenByUsers = controller.room.getSeenByUsers( final seenByUsers = timeline.room.getSeenByUsers(
controller.timeline!, timeline,
eventId: event.eventId,
); );
return Container( return Container(
width: double.infinity, width: double.infinity,
@ -40,8 +43,8 @@ class SeenByRow extends StatelessWidget {
: FluffyThemes.animationDuration, : FluffyThemes.animationDuration,
curve: FluffyThemes.animationCurve, curve: FluffyThemes.animationCurve,
alignment: alignment:
controller.timeline!.events.isNotEmpty && timeline.events.isNotEmpty &&
controller.timeline!.events.first.senderId == timeline.events.first.senderId ==
Matrix.of(context).client.userID Matrix.of(context).client.userID
? Alignment.topRight ? Alignment.topRight
: Alignment.topLeft, : Alignment.topLeft,