From 301bcd94f279747b37c747aa5c91deade79c0985 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Tue, 29 Sep 2026 20:47:20 -0400 Subject: [PATCH] fixup jumps from notifs sometimes not working --- lib/widgets/room_chat/room_chat.dart | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/widgets/room_chat/room_chat.dart b/lib/widgets/room_chat/room_chat.dart index 2aa3f8f..fff3a8d 100644 --- a/lib/widgets/room_chat/room_chat.dart +++ b/lib/widgets/room_chat/room_chat.dart @@ -68,6 +68,12 @@ final class const RoomChat({ final roomId = this.roomId!; + final jumpRowId = ref.watch( + JumpRequestController.provider.select( + (request) => request?.roomId == roomId ? request?.rowId : null, + ), + ); + final controllerProvider = RoomChatController.provider(( roomId: roomId, contextualEvent: contextualEvent.value, @@ -115,23 +121,26 @@ final class const RoomChat({ }); } - ref.listen(JumpRequestController.provider, (_, request) { - if (request == null || request.roomId != roomId) return; + useEffect(() { + if (jumpRowId == null) return null; - void tryJump() { + void check() { if (!context.mounted) return; - if (ref.read(JumpRequestController.provider) != request) return; if (scroll.scrollController.hasClients) { - ref.read(JumpRequestController.provider.notifier).consume(); - jumpToEvent(request.rowId); + jumpToEvent(jumpRowId); + Future.microtask( + () => ref.read(JumpRequestController.provider.notifier).consume(), + ); } else { - WidgetsBinding.instance.addPostFrameCallback((_) => tryJump()); + WidgetsBinding.instance.addPostFrameCallback((_) => check()); } } - WidgetsBinding.instance.addPostFrameCallback((_) => tryJump()); - }); + check(); + + return null; + }, [jumpRowId]); IList getEventOptions(Event event) => event.buildEventOptions(