From 8e130f7f669dddd208c209f379b532540a32d02c Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 17 Jun 2022 13:11:00 +0200 Subject: [PATCH 1/5] feat(ui): open message list to unread position --- .../lib/src/message_list_view.dart | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index e73b0330..fe78ee12 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -387,6 +387,11 @@ class _StreamMessageListViewState extends State { if (index != 0) return index + 1; return index; } + + if (unreadCount > 0) { + return unreadCount + 1; + } + return 0; } @@ -932,6 +937,9 @@ class _StreamMessageListViewState extends State { if (unreadCount > 0) { streamChannel!.channel.markRead(); } + + final index = unreadCount > 0 ? unreadCount + 1 : 0; + if (!_upToDate) { _bottomPaginationActive = false; initialAlignment = 0; @@ -939,11 +947,11 @@ class _StreamMessageListViewState extends State { await streamChannel!.reloadChannel(); WidgetsBinding.instance.addPostFrameCallback((_) { - _scrollController!.jumpTo(index: unreadCount); + _scrollController!.jumpTo(index: index); }); } else { _scrollController!.scrollTo( - index: unreadCount, + index: index, duration: const Duration(seconds: 1), curve: Curves.easeInOut, ); @@ -1366,6 +1374,8 @@ class _StreamMessageListViewState extends State { if (newStreamChannel != streamChannel) { streamChannel = newStreamChannel; _messageNewListener?.cancel(); + + unreadCount = streamChannel?.channel.state?.unreadCount ?? 0; initialIndex = _initialIndex; initialAlignment = _initialAlignment; @@ -1376,8 +1386,10 @@ class _StreamMessageListViewState extends State { ); } - _messageNewListener = - streamChannel!.channel.on(EventType.messageNew).listen((event) { + _messageNewListener = streamChannel!.channel + .on(EventType.messageNew) + .skip(1) //skipping the first event + .listen((event) { if (_upToDate) { _bottomPaginationActive = false; } @@ -1395,6 +1407,7 @@ class _StreamMessageListViewState extends State { ); }); } else if (streamChannel?.channel.state?.unreadCount != 0) { + print('increasing unread'); setState(() { unreadCount = unreadCount + 1; }); From 2d19f7c86f00b379b6378ba3c481afc725e747e2 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 17 Jun 2022 13:11:42 +0200 Subject: [PATCH 2/5] chore(ui): update changelog --- packages/stream_chat_flutter/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index e68c7374..08ecd22f 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -16,7 +16,7 @@ color of pinned messages. - Added unread messages divider in `StreamMessageListView`. - Added `StreamMessageListView.unreadMessagesSeparatorBuilder`. - +- Now `StreamMessageListView` opens to the oldest unread message by default. ## 4.2.0 🐞 Fixed From 7133955bbe601927371303d522627bd68703a917 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 17 Jun 2022 13:36:20 +0200 Subject: [PATCH 3/5] Update packages/stream_chat_flutter/lib/src/message_list_view.dart --- packages/stream_chat_flutter/lib/src/message_list_view.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index fe78ee12..74608116 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -1407,7 +1407,6 @@ class _StreamMessageListViewState extends State { ); }); } else if (streamChannel?.channel.state?.unreadCount != 0) { - print('increasing unread'); setState(() { unreadCount = unreadCount + 1; }); From 04768a10ef27f4475fbaecf31be866bed1c11c56 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 17 Jun 2022 13:36:51 +0200 Subject: [PATCH 4/5] Update packages/stream_chat_flutter/CHANGELOG.md --- packages/stream_chat_flutter/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 08ecd22f..b1cf4077 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -17,6 +17,7 @@ - Added unread messages divider in `StreamMessageListView`. - Added `StreamMessageListView.unreadMessagesSeparatorBuilder`. - Now `StreamMessageListView` opens to the oldest unread message by default. + ## 4.2.0 🐞 Fixed From 1cce2e6b8a9ad95aeda36a5bbdf90ff53c495889 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 17 Jun 2022 13:39:44 +0200 Subject: [PATCH 5/5] fix(ui): add comment --- .../stream_chat_flutter/lib/src/message_list_view.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 74608116..31853b90 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -1386,10 +1386,11 @@ class _StreamMessageListViewState extends State { ); } - _messageNewListener = streamChannel!.channel - .on(EventType.messageNew) - .skip(1) //skipping the first event - .listen((event) { + _messageNewListener = + streamChannel!.channel.on(EventType.messageNew).skip(1) + //skipping the first event because + //the StreamController is a BehaviorSubject + .listen((event) { if (_upToDate) { _bottomPaginationActive = false; }