Listening for changes both in reads and in messages
This commit is contained in:
+26
-17
@@ -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,
|
||||||
),
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user