From 641343d5fe3c6485df987462d825ca76b532c65a Mon Sep 17 00:00:00 2001 From: Krille Date: Thu, 8 Aug 2024 19:06:42 +0200 Subject: [PATCH] chore: Follow up scroll to event id fix --- lib/pages/chat/chat.dart | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 6f4a83e9d..f287d29cf 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; +import 'package:collection/collection.dart'; import 'package:desktop_drop/desktop_drop.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; @@ -216,15 +217,13 @@ class ChatController extends State EmojiPickerType emojiPickerType = EmojiPickerType.keyboard; void requestHistory([_]) async { - if (!timeline!.canRequestHistory) return; Logs().v('Requesting history...'); - await timeline!.requestHistory(historyCount: _loadHistoryCount); + await timeline?.requestHistory(historyCount: _loadHistoryCount); } void requestFuture() async { final timeline = this.timeline; if (timeline == null) return; - if (!timeline.canRequestFuture) return; Logs().v('Requesting future...'); final mostRecentEventId = timeline.events.first.eventId; await timeline.requestFuture(historyCount: _loadHistoryCount); @@ -343,6 +342,7 @@ class ChatController extends State eventContextId = null; } try { + timeline?.cancelSubscriptions(); timeline = await room.getTimeline( onUpdate: updateView, eventContextId: eventContextId, @@ -905,10 +905,16 @@ class ChatController extends State String eventId, { bool highlightEvent = true, }) async { - final eventIndex = timeline!.events - .where((event) => event.isVisibleInGui) - .toList() - .indexWhere((e) => e.eventId == eventId); + final foundEvent = + timeline!.events.firstWhereOrNull((event) => event.eventId == eventId); + + final eventIndex = foundEvent == null + ? -1 + : timeline!.events + .where((event) => event.isVisibleInGui || event.eventId == eventId) + .toList() + .indexOf(foundEvent); + if (eventIndex == -1) { setState(() { timeline = null;