@@ -139,7 +139,7 @@ class MessageListView extends StatefulWidget {
139139class _MessageListViewState extends State <MessageListView > {
140140 static const _newMessageLoadingOffset = 100 ;
141141 final ScrollController _scrollController = ScrollController ();
142- bool _isBottom = true ;
142+ bool _bottomWasVisible = true ;
143143 bool _topWasVisible = false ;
144144 List <Message > _messages = [];
145145 List <Message > _newMessageList = [];
@@ -333,7 +333,11 @@ class _MessageListViewState extends State<MessageListView> {
333333 onVisibilityChanged: (visibility) {
334334 final topIsVisible = visibility.visibleBounds != Rect .zero;
335335 if (topIsVisible && ! _topWasVisible) {
336- streamChannel.queryMessages ();
336+ if (widget.parentMessage == null ) {
337+ streamChannel.queryMessages ();
338+ } else {
339+ streamChannel.getReplies (widget.parentMessage.id);
340+ }
337341 }
338342 _topWasVisible = topIsVisible;
339343 },
@@ -368,12 +372,15 @@ class _MessageListViewState extends State<MessageListView> {
368372 return VisibilityDetector (
369373 key: ValueKey <String >('BOTTOM-MESSAGE' ),
370374 onVisibilityChanged: (visibility) {
371- _isBottom = visibility.visibleBounds != Rect .zero;
372- if (_isBottom && streamChannel.channel.config? .readEvents == true ) {
375+ final isVisible = visibility.visibleBounds != Rect .zero;
376+ if (isVisible &&
377+ ! _bottomWasVisible &&
378+ streamChannel.channel.config? .readEvents == true ) {
373379 if (streamChannel.channel.state.unreadCount > 0 ) {
374380 streamChannel.channel.markRead ();
375381 }
376382 }
383+ _bottomWasVisible = isVisible;
377384 },
378385 child: messageWidget,
379386 );
@@ -437,7 +444,8 @@ class _MessageListViewState extends State<MessageListView> {
437444 ? .read
438445 ? .where ((element) => element.user.id != userId)
439446 ? .where ((read) =>
440- read.lastRead.isAfter (message.createdAt) &&
447+ (read.lastRead.isAfter (message.createdAt) ||
448+ read.lastRead.isAtSameMomentAs (message.createdAt)) &&
441449 (index == 0 ||
442450 read.lastRead.isBefore (messages[index - 1 ].createdAt)))
443451 ? .toList ();
@@ -483,9 +491,6 @@ class _MessageListViewState extends State<MessageListView> {
483491 super .initState ();
484492
485493 final streamChannel = StreamChannel .of (context);
486- if (streamChannel.channel.state.unreadCount > 0 ) {
487- streamChannel.channel.markRead ();
488- }
489494
490495 Stream <List <Message >> stream;
491496
0 commit comments