diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 7772e5f65..8dc0033aa 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -285,13 +285,23 @@ class ChatController extends State await loadTimelineFuture; if (initialEventId != null) scrollToEventId(initialEventId); - final readMarkerEventIndex = readMarkerEventId.isEmpty + var readMarkerEventIndex = readMarkerEventId.isEmpty ? -1 : timeline!.events - .where((e) => e.isVisibleInGui) + .where((e) => e.isVisibleInGui || e.eventId == readMarkerEventId) .toList() .indexWhere((e) => e.eventId == readMarkerEventId); + // Read marker is existing but not found in first events. Try a single + // requestHistory call before opening timeline on event context: + if (readMarkerEventId.isNotEmpty && readMarkerEventIndex == -1) { + await timeline?.requestHistory(historyCount: _loadHistoryCount); + readMarkerEventIndex = timeline!.events + .where((e) => e.isVisibleInGui || e.eventId == readMarkerEventId) + .toList() + .indexWhere((e) => e.eventId == readMarkerEventId); + } + if (readMarkerEventIndex > 1) { Logs().v('Scroll up to visible event', readMarkerEventId); scrollToEventId(readMarkerEventId, highlightEvent: false);