wip read indicators

This commit is contained in:
Henry Hiles 2025-11-18 17:54:58 -05:00
commit fd0b020957
No known key found for this signature in database
3 changed files with 39 additions and 25 deletions

View file

@ -62,6 +62,7 @@ class RoomChat extends HookConsumerWidget {
final controllerProvider = RoomChatController.provider(
room.roomData,
);
final notifier = ref.watch(controllerProvider.notifier);
return Scaffold(
appBar: RoomAppbar(
room,
@ -112,9 +113,8 @@ class RoomChat extends HookConsumerWidget {
chatAnimatedListBuilder: (_, itemBuilder) =>
ChatAnimatedList(
itemBuilder: itemBuilder,
onEndReached: ref
.watch(controllerProvider.notifier)
.loadOlder,
onEndReached: notifier.loadOlder,
onStartReached: () => notifier.markRead(),
),
composerBuilder: (_) => ChatBox(
replyToMessage: replyToMessage.value,
@ -217,9 +217,8 @@ class RoomChat extends HookConsumerWidget {
),
linkPreviewData: message.linkPreviewData,
onLinkPreviewDataFetched:
(linkPreviewData) => ref
.watch(controllerProvider.notifier)
.updateMessage(
(linkPreviewData) =>
notifier.updateMessage(
message,
message.copyWith(
linkPreviewData:
@ -292,14 +291,13 @@ class RoomChat extends HookConsumerWidget {
: SizedBox.shrink(),
),
onMessageSend: (message) {
ref
.watch(controllerProvider.notifier)
.send(message, replyTo: replyToMessage.value);
notifier.send(
message,
replyTo: replyToMessage.value,
);
replyToMessage.value = null;
},
resolveUser: ref
.watch(controllerProvider.notifier)
.resolveUser,
resolveUser: notifier.resolveUser,
chatController: controller,
),
),

View file

@ -1,3 +1,4 @@
import "package:collection/collection.dart";
import "package:flutter/material.dart";
import "package:flutter_hooks/flutter_hooks.dart";
import "package:hooks_riverpod/hooks_riverpod.dart";
@ -72,11 +73,18 @@ class Sidebar extends HookConsumerWidget {
return Scaffold(
backgroundColor: Colors.transparent,
appBar: AppBar(
leading: AvatarOrHash(
space.avatar,
fallback: space.icon,
space.title,
headers: space.client.headers,
leading: Badge(
isLabelVisible:
space.children.firstWhereOrNull(
(room) => room.roomData.isUnread,
) !=
null,
child: AvatarOrHash(
space.avatar,
fallback: space.icon,
space.title,
headers: space.client.headers,
),
),
title: Text(
space.title,
@ -94,15 +102,18 @@ class Sidebar extends HookConsumerWidget {
destinations: space.children
.map(
(room) => NavigationRailDestination(
icon: AvatarOrHash(
room.avatar,
room.title,
fallback: selectedSpace.value == 1
? null
: Icon(Icons.numbers),
headers: space.client.headers,
),
label: Text(room.title),
icon: Badge(
isLabelVisible: room.roomData.isUnread,
child: AvatarOrHash(
room.avatar,
room.title,
fallback: selectedSpace.value == 1
? null
: Icon(Icons.numbers),
headers: space.client.headers,
),
),
),
)
.toList(),