wip read indicators
This commit is contained in:
parent
89dd28fec6
commit
fd0b020957
3 changed files with 39 additions and 25 deletions
|
|
@ -62,6 +62,11 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
);
|
||||
}
|
||||
|
||||
Future<void> markRead() async {
|
||||
final controller = await future;
|
||||
await room.setReadMarker(controller.messages.last.id);
|
||||
}
|
||||
|
||||
Future<void> updateMessage(Message message, Message newMessage) async =>
|
||||
(await future).updateMessage(message, newMessage);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue