Listening for changes both in reads and in messages

This commit is contained in:
Leandro Borges Ferreira
2023-02-10 16:02:26 +01:00
parent 769f657a9f
commit d410441aab
@@ -216,31 +216,40 @@ class StreamChannelListTile extends StatelessWidget {
initialData: channelState.messages, initialData: channelState.messages,
comparator: const ListEquality().equals, comparator: const ListEquality().equals,
builder: (context, messages) { builder: (context, messages) {
final lastMessage = messages.lastWhereOrNull( return BetterStreamBuilder<List<Read>>(
(m) => !m.shadowed && !m.isDeleted, stream: channelState.readStream,
); initialData: channelState.read,
builder: (context, reads) {
final lastMessage = messages.lastWhereOrNull(
(m) => !m.shadowed && !m.isDeleted,
);
if (lastMessage == null || if (lastMessage == null ||
(lastMessage.user?.id != currentUser.id)) { (lastMessage.user?.id != currentUser.id)) {
return const Offstage(); return const Offstage();
} }
final isLastMessageRead = channelState.read final isLastMessageRead = channelState.read
.where((readData) => readData.user.id != currentUser.id) .where(
.any((readData) => (readData) => readData.user.id != currentUser.id,
readData.lastRead.isAfter(lastMessage.createdAt) || )
readData.lastRead .any((readData) =>
.isAtSameMomentAs(lastMessage.createdAt)); readData.lastRead
.isAfter(lastMessage.createdAt) ||
readData.lastRead
.isAtSameMomentAs(lastMessage.createdAt));
return Padding( return Padding(
padding: const EdgeInsets.only(right: 4), padding: const EdgeInsets.only(right: 4),
child: child: sendingIndicatorBuilder?.call(
sendingIndicatorBuilder?.call(context, lastMessage) ?? context, lastMessage) ??
StreamSendingIndicator( StreamSendingIndicator(
message: lastMessage, message: lastMessage,
size: channelPreviewTheme.indicatorIconSize, size: channelPreviewTheme.indicatorIconSize,
isMessageRead: isLastMessageRead, isMessageRead: isLastMessageRead,
), ),
);
},
); );
}, },
), ),