only mark as read when fully at bottom

This commit is contained in:
Henry Hiles 2026-09-29 10:46:15 -04:00
commit 9e024fb6f2
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs

View file

@ -109,14 +109,13 @@ final class ChatScroll({
useEffect( useEffect(
() { () {
const loadThreshold = 500.0; const loadThreshold = 500.0;
const readThreshold = 50.0;
Future<void> checkPosition() async { Future<void> checkPosition() async {
if (!scrollController.hasClients) return; if (!scrollController.hasClients) return;
final position = scrollController.position; final position = scrollController.position;
final isAtBottom = position.extentBefore <= readThreshold; final isAtBottom = position.extentBefore <= 0;
if (isAtBottom != atBottom.value) atBottom.value = isAtBottom; if (isAtBottom != atBottom.value) atBottom.value = isAtBottom;
if (position.extentAfter <= loadThreshold) { if (position.extentAfter <= loadThreshold) {
@ -124,12 +123,12 @@ final class ChatScroll({
} else if (contextualEvent.value != null && } else if (contextualEvent.value != null &&
position.extentBefore <= loadThreshold) { position.extentBefore <= loadThreshold) {
await paginate(.forward); await paginate(.forward);
} else if (position.extentBefore <= readThreshold) { } else if (position.extentBefore <= 0) {
await markRead(); await markRead();
} }
if (controllerData.isLoading == false && if (controllerData.isLoading == false &&
position.extentBefore <= readThreshold && position.extentBefore <= 0 &&
controllerData.value?.hasMoreForward == false && controllerData.value?.hasMoreForward == false &&
contextualEvent.value != null) { contextualEvent.value != null) {
anchorId.value = null; anchorId.value = null;