From a59dd88af4eff786187fa34e6fc6260467f2ef6b Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Thu, 9 Feb 2023 15:07:17 +0100 Subject: [PATCH 01/14] Fixing logic for sending indicator --- .../src/message_widget/sending_indicator_wrapper.dart | 5 +++-- .../channel_scroll_view/stream_channel_list_tile.dart | 11 ++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart index 9ca61558..9e2a97c2 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart @@ -65,10 +65,11 @@ class SendingIndicatorWrapper extends StatelessWidget { initialData: channel.state?.read, builder: (context, data) { final readList = data.where((it) => - it.user.id != streamChat.currentUser?.id && + it.user.id != streamChat.currentUser?.id && (it.lastRead.isAfter(message.createdAt) || it.lastRead.isAtSameMomentAs(message.createdAt))); - final isMessageRead = readList.length >= (channel.memberCount ?? 0) - 1; + + final isMessageRead = readList.isNotEmpty; Widget child = StreamSendingIndicator( message: message, isMessageRead: isMessageRead, diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index 508b9458..267c3694 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -225,6 +225,13 @@ class StreamChannelListTile extends StatelessWidget { return const Offstage(); } + final isLastMessageRead = channelState.read + .where((readData) => readData.user.id != currentUser.id) + .any((readData) => + readData.lastRead.isAfter(lastMessage.createdAt) || + readData.lastRead + .isAtSameMomentAs(lastMessage.createdAt)); + return Padding( padding: const EdgeInsets.only(right: 4), child: @@ -232,9 +239,7 @@ class StreamChannelListTile extends StatelessWidget { StreamSendingIndicator( message: lastMessage, size: channelPreviewTheme.indicatorIconSize, - isMessageRead: channelState - .currentUserRead!.lastRead - .isAfter(lastMessage.createdAt), + isMessageRead: isLastMessageRead, ), ); }, From 769f657a9f71d913a916cac32f1fdee0fad5035c Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Thu, 9 Feb 2023 15:11:07 +0100 Subject: [PATCH 02/14] Update CHANGELOG.md --- packages/stream_chat_flutter/CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 2585f5b8..3148266d 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,7 +1,9 @@ ## Upcoming 🐞 Fixed -[#1463](https://github.com/GetStream/stream-chat-flutter/pull/1463) Fixed support for iPad in the share button for images. + +- [#1461](https://github.com/GetStream/stream-chat-flutter/pull/1461) Fixed logic for showing that a message was read unsing sending indicator. +- [#1463](https://github.com/GetStream/stream-chat-flutter/pull/1463) Fixed support for iPad in the share button for images. ✅ Added From d410441aab5960248a4e7196e786fbc1bc28d75b Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Thu, 9 Feb 2023 17:42:03 +0100 Subject: [PATCH 03/14] Listening for changes both in reads and in messages --- .../stream_channel_list_tile.dart | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index 267c3694..a17a2eaf 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -216,31 +216,40 @@ class StreamChannelListTile extends StatelessWidget { initialData: channelState.messages, comparator: const ListEquality().equals, builder: (context, messages) { - final lastMessage = messages.lastWhereOrNull( - (m) => !m.shadowed && !m.isDeleted, - ); + return BetterStreamBuilder>( + stream: channelState.readStream, + initialData: channelState.read, + builder: (context, reads) { + final lastMessage = messages.lastWhereOrNull( + (m) => !m.shadowed && !m.isDeleted, + ); - if (lastMessage == null || - (lastMessage.user?.id != currentUser.id)) { - return const Offstage(); - } + if (lastMessage == null || + (lastMessage.user?.id != currentUser.id)) { + return const Offstage(); + } - final isLastMessageRead = channelState.read - .where((readData) => readData.user.id != currentUser.id) - .any((readData) => - readData.lastRead.isAfter(lastMessage.createdAt) || - readData.lastRead - .isAtSameMomentAs(lastMessage.createdAt)); + final isLastMessageRead = channelState.read + .where( + (readData) => readData.user.id != currentUser.id, + ) + .any((readData) => + readData.lastRead + .isAfter(lastMessage.createdAt) || + readData.lastRead + .isAtSameMomentAs(lastMessage.createdAt)); - return Padding( - padding: const EdgeInsets.only(right: 4), - child: - sendingIndicatorBuilder?.call(context, lastMessage) ?? + return Padding( + padding: const EdgeInsets.only(right: 4), + child: sendingIndicatorBuilder?.call( + context, lastMessage) ?? StreamSendingIndicator( message: lastMessage, size: channelPreviewTheme.indicatorIconSize, isMessageRead: isLastMessageRead, ), + ); + }, ); }, ), From 28de67097dffa2846a9fa2ff08b73682350ba8bd Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Fri, 10 Feb 2023 15:56:53 +0100 Subject: [PATCH 04/14] Fixing format --- .../lib/src/message_widget/sending_indicator_wrapper.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart index 9e2a97c2..1e2e31c6 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart @@ -65,7 +65,7 @@ class SendingIndicatorWrapper extends StatelessWidget { initialData: channel.state?.read, builder: (context, data) { final readList = data.where((it) => - it.user.id != streamChat.currentUser?.id && + it.user.id != streamChat.currentUser?.id && (it.lastRead.isAfter(message.createdAt) || it.lastRead.isAtSameMomentAs(message.createdAt))); From 6c4707772f492b0c370fda07db2f178f546bc062 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 14:01:18 +0100 Subject: [PATCH 05/14] Update CHANGELOG.md --- packages/stream_chat_flutter/CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 91c1eb01..51421f6d 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -2,8 +2,8 @@ 🐞 Fixed -- [#1461](https://github.com/GetStream/stream-chat-flutter/pull/1461) Fixed logic for showing that a message was read unsing sending indicator. -- [#1463](https://github.com/GetStream/stream-chat-flutter/pull/1463) Fixed support for iPad in the share button for images. +- [#1456](https://github.com/GetStream/stream-chat-flutter/issues/1456) Fixed logic for showing that a message was read using sending indicator. +- [#1462](https://github.com/GetStream/stream-chat-flutter/issues/1462) Fixed support for iPad in the share button for images. ✅ Added From ffd26a4574151b3738f9b07fd50f741d2da86ab7 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 14:27:21 +0100 Subject: [PATCH 06/14] Removing message builder --- .../stream_channel_list_tile.dart | 66 +++++++++---------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index a17a2eaf..a89b1a29 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -211,45 +211,39 @@ class StreamChannelListTile extends StatelessWidget { child: subtitle, ), ), - BetterStreamBuilder>( - stream: channelState.messagesStream, - initialData: channelState.messages, - comparator: const ListEquality().equals, - builder: (context, messages) { - return BetterStreamBuilder>( - stream: channelState.readStream, - initialData: channelState.read, - builder: (context, reads) { - final lastMessage = messages.lastWhereOrNull( - (m) => !m.shadowed && !m.isDeleted, - ); + BetterStreamBuilder>( + stream: channelState.readStream, + initialData: channelState.read, + builder: (context, reads) { + final lastMessage = channelState.messages.lastWhereOrNull( + (m) => !m.shadowed && !m.isDeleted, + ); - if (lastMessage == null || - (lastMessage.user?.id != currentUser.id)) { - return const Offstage(); - } + if (lastMessage == null || + (lastMessage.user?.id != currentUser.id)) { + return const Offstage(); + } - final isLastMessageRead = channelState.read - .where( - (readData) => readData.user.id != currentUser.id, - ) - .any((readData) => - readData.lastRead - .isAfter(lastMessage.createdAt) || - readData.lastRead - .isAtSameMomentAs(lastMessage.createdAt)); + final isLastMessageRead = channelState.read + .where( + (readData) => readData.user.id != currentUser.id, + ) + .any((readData) => + readData.lastRead.isAfter(lastMessage.createdAt) || + readData.lastRead + .isAtSameMomentAs(lastMessage.createdAt)); - return Padding( - padding: const EdgeInsets.only(right: 4), - child: sendingIndicatorBuilder?.call( - context, lastMessage) ?? - StreamSendingIndicator( - message: lastMessage, - size: channelPreviewTheme.indicatorIconSize, - isMessageRead: isLastMessageRead, - ), - ); - }, + return Padding( + padding: const EdgeInsets.only(right: 4), + child: sendingIndicatorBuilder?.call( + context, + lastMessage, + ) ?? + StreamSendingIndicator( + message: lastMessage, + size: channelPreviewTheme.indicatorIconSize, + isMessageRead: isLastMessageRead, + ), ); }, ), From 8405d8a91906e3eeb23cf78b512ef36369417801 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 17:04:50 +0100 Subject: [PATCH 07/14] Using SendingIndicatorWrapper instead of StreamSendingIndicator directly --- .../lib/src/channel/channel_preview.dart | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart index 94c118c8..7bca5249 100644 --- a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart +++ b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart @@ -6,6 +6,7 @@ import 'package:contextmenu/contextmenu.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/context_menu_items/stream_chat_context_menu_item.dart'; import 'package:stream_chat_flutter/src/dialogs/dialogs.dart'; +import 'package:stream_chat_flutter/src/message_widget/sending_indicator_wrapper.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// {@template channelPreview} @@ -76,6 +77,7 @@ class ChannelPreview extends StatelessWidget { Widget build(BuildContext context) { final channelPreviewTheme = StreamChannelPreviewTheme.of(context); final streamChatState = StreamChat.of(context); + final streamChatTheme = StreamChatTheme.of(context); return BetterStreamBuilder( stream: channel.isMutedStream, initialData: channel.isMuted, @@ -292,20 +294,20 @@ class ChannelPreview extends StatelessWidget { stream: channel.state?.readStream, initialData: channel.state?.read, builder: (context, data) { - final readList = data.where((it) => - it.user.id != - channel.client.state.currentUser?.id && - (it.lastRead - .isAfter(lastMessage!.createdAt) || - it.lastRead.isAtSameMomentAs( - lastMessage.createdAt, - ))); - final isMessageRead = readList.length >= - (channel.memberCount ?? 0) - 1; - return StreamSendingIndicator( - message: lastMessage!, - size: channelPreviewTheme.indicatorIconSize, - isMessageRead: isMessageRead, + + final hasNonUrlAttachments = lastMessage! + .attachments + .where((it) => + it.titleLink == null || + it.type == 'giphy') + .isNotEmpty; + + return SendingIndicatorWrapper( + messageTheme: streamChatTheme.ownMessageTheme, + message: lastMessage, + hasNonUrlAttachments: hasNonUrlAttachments, + streamChat: streamChatState, + streamChatTheme: streamChatTheme, ); }, ), From 6d97b8ac76942e49e9dff2e949f653704a9eb6b1 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 17:10:14 +0100 Subject: [PATCH 08/14] Using Builder of messages instead of Read --- .../stream_channel_list_tile.dart | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index a89b1a29..999ce91a 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -211,11 +211,12 @@ class StreamChannelListTile extends StatelessWidget { child: subtitle, ), ), - BetterStreamBuilder>( - stream: channelState.readStream, - initialData: channelState.read, - builder: (context, reads) { - final lastMessage = channelState.messages.lastWhereOrNull( + BetterStreamBuilder>( + stream: channelState.messagesStream, + initialData: channelState.messages, + comparator: const ListEquality().equals, + builder: (context, messages) { + final lastMessage = messages.lastWhereOrNull( (m) => !m.shadowed && !m.isDeleted, ); @@ -235,15 +236,13 @@ class StreamChannelListTile extends StatelessWidget { return Padding( padding: const EdgeInsets.only(right: 4), - child: sendingIndicatorBuilder?.call( - context, - lastMessage, - ) ?? - StreamSendingIndicator( - message: lastMessage, - size: channelPreviewTheme.indicatorIconSize, - isMessageRead: isLastMessageRead, - ), + child: + sendingIndicatorBuilder?.call(context, lastMessage) ?? + StreamSendingIndicator( + message: lastMessage, + size: channelPreviewTheme.indicatorIconSize, + isMessageRead: isLastMessageRead, + ), ); }, ), From 06542da156ae4b7ae49135399e0df9ad2526025a Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 17:33:23 +0100 Subject: [PATCH 09/14] Using only SendingIndicatorBuilder (rename from SendingIndicatorWrapper) --- .../lib/src/channel/channel_preview.dart | 3 ++- .../lib/src/message_widget/bottom_row.dart | 2 +- .../sending_indicator_wrapper.dart | 16 +++++++++------- .../stream_channel_list_tile.dart | 16 +++++++++++++--- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart index 7bca5249..ded6f558 100644 --- a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart +++ b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart @@ -302,12 +302,13 @@ class ChannelPreview extends StatelessWidget { it.type == 'giphy') .isNotEmpty; - return SendingIndicatorWrapper( + return SendingIndicatorBuilder( messageTheme: streamChatTheme.ownMessageTheme, message: lastMessage, hasNonUrlAttachments: hasNonUrlAttachments, streamChat: streamChatState, streamChatTheme: streamChatTheme, + channel: channel, ); }, ), diff --git a/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart b/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart index 5b1b1466..579dc65d 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart @@ -204,7 +204,7 @@ class BottomRow extends StatelessWidget { if (showSendingIndicator) WidgetSpan( child: sendingIndicatorBuilder?.call(context, message) ?? - SendingIndicatorWrapper( + SendingIndicatorBuilder( messageTheme: messageTheme, message: message, hasNonUrlAttachments: hasNonUrlAttachments, diff --git a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart index 1e2e31c6..02ebe5ff 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart @@ -6,15 +6,16 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// /// Used in [BottomRow]. Should not be used elsewhere. /// {@endtemplate} -class SendingIndicatorWrapper extends StatelessWidget { +class SendingIndicatorBuilder extends StatelessWidget { /// {@macro sendingIndicatorWrapper} - const SendingIndicatorWrapper({ + const SendingIndicatorBuilder({ super.key, required this.messageTheme, required this.message, required this.hasNonUrlAttachments, required this.streamChat, required this.streamChatTheme, + this.channel, }); /// {@macro messageTheme} @@ -32,10 +33,13 @@ class SendingIndicatorWrapper extends StatelessWidget { /// {@macro streamChatThemeData} final StreamChatThemeData streamChatTheme; + final Channel? channel; + @override Widget build(BuildContext context) { final style = messageTheme.createdAtStyle; - final memberCount = StreamChannel.of(context).channel.memberCount ?? 0; + final thisChannel = channel ?? StreamChannel.of(context).channel; + final memberCount = thisChannel.memberCount ?? 0; if (hasNonUrlAttachments && (message.status == MessageSendingStatus.sending || @@ -58,11 +62,9 @@ class SendingIndicatorWrapper extends StatelessWidget { ); } - final channel = StreamChannel.of(context).channel; - return BetterStreamBuilder>( - stream: channel.state?.readStream, - initialData: channel.state?.read, + stream: thisChannel.state?.readStream, + initialData: thisChannel.state?.read, builder: (context, data) { final readList = data.where((it) => it.user.id != streamChat.currentUser?.id && diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index 999ce91a..08eb9e3b 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -1,5 +1,6 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; +import 'package:stream_chat_flutter/src/message_widget/sending_indicator_wrapper.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// A widget that displays a channel preview. @@ -145,6 +146,8 @@ class StreamChannelListTile extends StatelessWidget { final currentUser = channel.client.state.currentUser!; final channelPreviewTheme = StreamChannelPreviewTheme.of(context); + final streamChatTheme = StreamChatTheme.of(context); + final streamChat = StreamChat.of(context); final leading = this.leading ?? StreamChannelAvatar( @@ -234,14 +237,21 @@ class StreamChannelListTile extends StatelessWidget { readData.lastRead .isAtSameMomentAs(lastMessage.createdAt)); + final hasNonUrlAttachments = lastMessage.attachments + .where((it) => it.titleLink == null || it.type == 'giphy') + .isNotEmpty; + return Padding( padding: const EdgeInsets.only(right: 4), child: sendingIndicatorBuilder?.call(context, lastMessage) ?? - StreamSendingIndicator( + SendingIndicatorBuilder( + messageTheme: streamChatTheme.ownMessageTheme, message: lastMessage, - size: channelPreviewTheme.indicatorIconSize, - isMessageRead: isLastMessageRead, + hasNonUrlAttachments: hasNonUrlAttachments, + streamChat: streamChat, + streamChatTheme: streamChatTheme, + channel: channel, ), ); }, From 88572e3df3aaf84d7c783d332dc613fade2f4378 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 17:37:15 +0100 Subject: [PATCH 10/14] Removing empty line --- .../stream_chat_flutter/lib/src/channel/channel_preview.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart index ded6f558..2626ad19 100644 --- a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart +++ b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart @@ -294,7 +294,6 @@ class ChannelPreview extends StatelessWidget { stream: channel.state?.readStream, initialData: channel.state?.read, builder: (context, data) { - final hasNonUrlAttachments = lastMessage! .attachments .where((it) => From 23190d5b06fa46843451303f3154dacebf12851b Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 18:38:57 +0100 Subject: [PATCH 11/14] Docs --- .../lib/src/message_widget/sending_indicator_wrapper.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart index 02ebe5ff..9b0b2819 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart @@ -33,6 +33,7 @@ class SendingIndicatorBuilder extends StatelessWidget { /// {@macro streamChatThemeData} final StreamChatThemeData streamChatTheme; + /// {@macro channel} final Channel? channel; @override From 9cafabc023ca1151406caf2814fd117f4e41f977 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 18:39:11 +0100 Subject: [PATCH 12/14] Removing unused code --- .../channel_scroll_view/stream_channel_list_tile.dart | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index 08eb9e3b..fca7cf84 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -227,16 +227,7 @@ class StreamChannelListTile extends StatelessWidget { (lastMessage.user?.id != currentUser.id)) { return const Offstage(); } - - final isLastMessageRead = channelState.read - .where( - (readData) => readData.user.id != currentUser.id, - ) - .any((readData) => - readData.lastRead.isAfter(lastMessage.createdAt) || - readData.lastRead - .isAtSameMomentAs(lastMessage.createdAt)); - + final hasNonUrlAttachments = lastMessage.attachments .where((it) => it.titleLink == null || it.type == 'giphy') .isNotEmpty; From b9f150ae407e743dfe6dfbe867ced608c56e19f2 Mon Sep 17 00:00:00 2001 From: Leandro Borges Ferreira Date: Wed, 15 Feb 2023 19:26:00 +0100 Subject: [PATCH 13/14] Removing empty line --- .../channel_scroll_view/stream_channel_list_tile.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index fca7cf84..bf116bd8 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -227,7 +227,7 @@ class StreamChannelListTile extends StatelessWidget { (lastMessage.user?.id != currentUser.id)) { return const Offstage(); } - + final hasNonUrlAttachments = lastMessage.attachments .where((it) => it.titleLink == null || it.type == 'giphy') .isNotEmpty; From 3dbe1c1f0b4f4a5837df863f7479d9e0ea031e31 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Thu, 20 Apr 2023 14:54:11 +0530 Subject: [PATCH 14/14] rename file to sending_indicator_builder.dart Signed-off-by: xsahil03x --- .../lib/src/channel/channel_preview.dart | 2 +- .../lib/src/message_widget/bottom_row.dart | 2 +- ...tor_wrapper.dart => sending_indicator_builder.dart} | 10 ++++++---- .../channel_scroll_view/stream_channel_list_tile.dart | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) rename packages/stream_chat_flutter/lib/src/message_widget/{sending_indicator_wrapper.dart => sending_indicator_builder.dart} (93%) diff --git a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart index 2626ad19..2ce6983c 100644 --- a/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart +++ b/packages/stream_chat_flutter/lib/src/channel/channel_preview.dart @@ -6,7 +6,7 @@ import 'package:contextmenu/contextmenu.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/context_menu_items/stream_chat_context_menu_item.dart'; import 'package:stream_chat_flutter/src/dialogs/dialogs.dart'; -import 'package:stream_chat_flutter/src/message_widget/sending_indicator_wrapper.dart'; +import 'package:stream_chat_flutter/src/message_widget/sending_indicator_builder.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// {@template channelPreview} diff --git a/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart b/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart index 579dc65d..289088af 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/message_widget/sending_indicator_wrapper.dart'; +import 'package:stream_chat_flutter/src/message_widget/sending_indicator_builder.dart'; import 'package:stream_chat_flutter/src/message_widget/thread_painter.dart'; import 'package:stream_chat_flutter/src/message_widget/thread_participants.dart'; import 'package:stream_chat_flutter/src/message_widget/username.dart'; diff --git a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_builder.dart similarity index 93% rename from packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart rename to packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_builder.dart index 9b0b2819..52ecc1cf 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_wrapper.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/sending_indicator_builder.dart @@ -39,8 +39,8 @@ class SendingIndicatorBuilder extends StatelessWidget { @override Widget build(BuildContext context) { final style = messageTheme.createdAtStyle; - final thisChannel = channel ?? StreamChannel.of(context).channel; - final memberCount = thisChannel.memberCount ?? 0; + final channel = this.channel ?? StreamChannel.of(context).channel; + final memberCount = channel.memberCount ?? 0; if (hasNonUrlAttachments && (message.status == MessageSendingStatus.sending || @@ -64,8 +64,8 @@ class SendingIndicatorBuilder extends StatelessWidget { } return BetterStreamBuilder>( - stream: thisChannel.state?.readStream, - initialData: thisChannel.state?.read, + stream: channel.state?.readStream, + initialData: channel.state?.read, builder: (context, data) { final readList = data.where((it) => it.user.id != streamChat.currentUser?.id && @@ -78,6 +78,7 @@ class SendingIndicatorBuilder extends StatelessWidget { isMessageRead: isMessageRead, size: style!.fontSize, ); + if (isMessageRead) { child = Row( mainAxisSize: MainAxisSize.min, @@ -94,6 +95,7 @@ class SendingIndicatorBuilder extends StatelessWidget { ], ); } + return child; }, ); diff --git a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart index bf116bd8..ef665e32 100644 --- a/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart +++ b/packages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dart @@ -1,6 +1,6 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/message_widget/sending_indicator_wrapper.dart'; +import 'package:stream_chat_flutter/src/message_widget/sending_indicator_builder.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// A widget that displays a channel preview.