From 8ae8dbe45e6b58f68c8c5b3ef690bce3ba013954 Mon Sep 17 00:00:00 2001 From: Krille Date: Sun, 28 Jul 2024 09:52:27 +0200 Subject: [PATCH] fix: Scroll to event missing the position --- lib/pages/chat/chat.dart | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 2592f560c..ccfb1eb84 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -29,6 +29,7 @@ import 'package:fluffychat/pages/chat/recording_dialog.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/app_lock.dart'; @@ -292,7 +293,7 @@ class ChatController extends State if (timeline?.events.any((event) => event.eventId == fullyRead) ?? false) { Logs().v('Scroll up to visible event', fullyRead); - setReadMarker(); + scrollToEventId(fullyRead); return; } if (!mounted) return; @@ -901,7 +902,10 @@ class ChatController extends State } void scrollToEventId(String eventId) async { - final eventIndex = timeline!.events.indexWhere((e) => e.eventId == eventId); + final eventIndex = timeline!.events + .where((event) => event.isVisibleInGui) + .toList() + .indexWhere((e) => e.eventId == eventId); if (eventIndex == -1) { setState(() { timeline = null; @@ -921,7 +925,8 @@ class ChatController extends State scrollToEventIdMarker = eventId; }); await scrollController.scrollToIndex( - eventIndex, + eventIndex + 1, + duration: FluffyThemes.animationDuration, preferPosition: AutoScrollPosition.middle, ); _updateScrollController();