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 =>
|
Future<void> updateMessage(Message message, Message newMessage) async =>
|
||||||
(await future).updateMessage(message, newMessage);
|
(await future).updateMessage(message, newMessage);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ class RoomChat extends HookConsumerWidget {
|
||||||
final controllerProvider = RoomChatController.provider(
|
final controllerProvider = RoomChatController.provider(
|
||||||
room.roomData,
|
room.roomData,
|
||||||
);
|
);
|
||||||
|
final notifier = ref.watch(controllerProvider.notifier);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: RoomAppbar(
|
appBar: RoomAppbar(
|
||||||
room,
|
room,
|
||||||
|
|
@ -112,9 +113,8 @@ class RoomChat extends HookConsumerWidget {
|
||||||
chatAnimatedListBuilder: (_, itemBuilder) =>
|
chatAnimatedListBuilder: (_, itemBuilder) =>
|
||||||
ChatAnimatedList(
|
ChatAnimatedList(
|
||||||
itemBuilder: itemBuilder,
|
itemBuilder: itemBuilder,
|
||||||
onEndReached: ref
|
onEndReached: notifier.loadOlder,
|
||||||
.watch(controllerProvider.notifier)
|
onStartReached: () => notifier.markRead(),
|
||||||
.loadOlder,
|
|
||||||
),
|
),
|
||||||
composerBuilder: (_) => ChatBox(
|
composerBuilder: (_) => ChatBox(
|
||||||
replyToMessage: replyToMessage.value,
|
replyToMessage: replyToMessage.value,
|
||||||
|
|
@ -217,9 +217,8 @@ class RoomChat extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
linkPreviewData: message.linkPreviewData,
|
linkPreviewData: message.linkPreviewData,
|
||||||
onLinkPreviewDataFetched:
|
onLinkPreviewDataFetched:
|
||||||
(linkPreviewData) => ref
|
(linkPreviewData) =>
|
||||||
.watch(controllerProvider.notifier)
|
notifier.updateMessage(
|
||||||
.updateMessage(
|
|
||||||
message,
|
message,
|
||||||
message.copyWith(
|
message.copyWith(
|
||||||
linkPreviewData:
|
linkPreviewData:
|
||||||
|
|
@ -292,14 +291,13 @@ class RoomChat extends HookConsumerWidget {
|
||||||
: SizedBox.shrink(),
|
: SizedBox.shrink(),
|
||||||
),
|
),
|
||||||
onMessageSend: (message) {
|
onMessageSend: (message) {
|
||||||
ref
|
notifier.send(
|
||||||
.watch(controllerProvider.notifier)
|
message,
|
||||||
.send(message, replyTo: replyToMessage.value);
|
replyTo: replyToMessage.value,
|
||||||
|
);
|
||||||
replyToMessage.value = null;
|
replyToMessage.value = null;
|
||||||
},
|
},
|
||||||
resolveUser: ref
|
resolveUser: notifier.resolveUser,
|
||||||
.watch(controllerProvider.notifier)
|
|
||||||
.resolveUser,
|
|
||||||
chatController: controller,
|
chatController: controller,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import "package:collection/collection.dart";
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_hooks/flutter_hooks.dart";
|
import "package:flutter_hooks/flutter_hooks.dart";
|
||||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||||
|
|
@ -72,11 +73,18 @@ class Sidebar extends HookConsumerWidget {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
leading: AvatarOrHash(
|
leading: Badge(
|
||||||
space.avatar,
|
isLabelVisible:
|
||||||
fallback: space.icon,
|
space.children.firstWhereOrNull(
|
||||||
space.title,
|
(room) => room.roomData.isUnread,
|
||||||
headers: space.client.headers,
|
) !=
|
||||||
|
null,
|
||||||
|
child: AvatarOrHash(
|
||||||
|
space.avatar,
|
||||||
|
fallback: space.icon,
|
||||||
|
space.title,
|
||||||
|
headers: space.client.headers,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
title: Text(
|
title: Text(
|
||||||
space.title,
|
space.title,
|
||||||
|
|
@ -94,15 +102,18 @@ class Sidebar extends HookConsumerWidget {
|
||||||
destinations: space.children
|
destinations: space.children
|
||||||
.map(
|
.map(
|
||||||
(room) => NavigationRailDestination(
|
(room) => NavigationRailDestination(
|
||||||
icon: AvatarOrHash(
|
|
||||||
room.avatar,
|
|
||||||
room.title,
|
|
||||||
fallback: selectedSpace.value == 1
|
|
||||||
? null
|
|
||||||
: Icon(Icons.numbers),
|
|
||||||
headers: space.client.headers,
|
|
||||||
),
|
|
||||||
label: Text(room.title),
|
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(),
|
.toList(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue