diff --git a/packages/stream_chat_flutter/lib/src/attachment/builder/attachment_widget_builder.dart b/packages/stream_chat_flutter/lib/src/attachment/builder/attachment_widget_builder.dart index f8ef052f..f9b389ef 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/builder/attachment_widget_builder.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/builder/attachment_widget_builder.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/attachment/attachment.dart'; -import 'package:stream_chat_flutter/src/attachment/gallery_attachment.dart'; import 'package:stream_chat_flutter/src/attachment/thumbnail/media_attachment_thumbnail.dart'; -import 'package:stream_chat_flutter/src/attachment/url_attachment.dart'; import 'package:stream_chat_flutter/src/stream_chat.dart'; import 'package:stream_chat_flutter/src/theme/stream_chat_theme.dart'; import 'package:stream_chat_flutter/src/utils/utils.dart'; diff --git a/packages/stream_chat_flutter/lib/src/fullscreen_media/full_screen_media_desktop.dart b/packages/stream_chat_flutter/lib/src/fullscreen_media/full_screen_media_desktop.dart index b4318f8e..b5bb09d3 100644 --- a/packages/stream_chat_flutter/lib/src/fullscreen_media/full_screen_media_desktop.dart +++ b/packages/stream_chat_flutter/lib/src/fullscreen_media/full_screen_media_desktop.dart @@ -1,9 +1,7 @@ import 'package:contextmenu/contextmenu.dart'; import 'package:dart_vlc/dart_vlc.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:photo_view/photo_view.dart'; -import 'package:stream_chat_flutter/platform_widget_builder/platform_widget_builder.dart'; import 'package:stream_chat_flutter/src/attachment/thumbnail/media_attachment_thumbnail.dart'; import 'package:stream_chat_flutter/src/context_menu_items/download_menu_item.dart'; import 'package:stream_chat_flutter/src/fullscreen_media/full_screen_media_widget.dart'; diff --git a/packages/stream_chat_flutter/lib/src/message_list_view/floating_date_divider.dart b/packages/stream_chat_flutter/lib/src/message_list_view/floating_date_divider.dart index dbaccc17..d8202ecd 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view/floating_date_divider.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view/floating_date_divider.dart @@ -38,61 +38,39 @@ class FloatingDateDivider extends StatelessWidget { @override Widget build(BuildContext context) { - return Positioned( - top: 20, - left: 0, - right: 0, - child: BetterStreamBuilder>( - initialData: itemPositionListener.itemPositions.value, - stream: valueListenableToStreamAdapter( - itemPositionListener.itemPositions, - ), - comparator: (a, b) { - if (a == null || b == null) { - return false; - } + final itemPositions = itemPositionListener.itemPositions; + return ValueListenableBuilder( + valueListenable: itemPositions, + builder: (context, positions, child) { + if (positions.isEmpty || messages.isEmpty) { + return const Offstage(); + } + + int? index; + if (reverse) { + index = getTopElementIndex(positions); + } else { + index = getBottomElementIndex(positions); + } + + if ((index == null) || + (!isThreadConversation && index == itemCount - 2) || + (isThreadConversation && index == itemCount - 1)) { + return const Offstage(); + } + + if (index <= 2 || index >= itemCount - 3) { if (reverse) { - final aTop = getTopElementIndex(a); - final bTop = getTopElementIndex(b); - return aTop == bTop; + index = itemCount - 4; } else { - final aBottom = getBottomElementIndex(a); - final bBottom = getBottomElementIndex(b); - return aBottom == bBottom; - } - }, - builder: (context, values) { - if (values.isEmpty || messages.isEmpty) { - return const Offstage(); + index = 2; } + } - int? index; - if (reverse) { - index = getTopElementIndex(values); - } else { - index = getBottomElementIndex(values); - } - - if ((index == null) || - (!isThreadConversation && index == itemCount - 2) || - (isThreadConversation && index == itemCount - 1)) { - return const Offstage(); - } - - if (index <= 2 || index >= itemCount - 3) { - if (reverse) { - index = itemCount - 4; - } else { - index = 2; - } - } - - final message = messages[index - 2]; - return dateDividerBuilder != null - ? dateDividerBuilder!(message.createdAt.toLocal()) - : StreamDateDivider(dateTime: message.createdAt.toLocal()); - }, - ), + final message = messages[index - 2]; + return dateDividerBuilder?.call(message.createdAt.toLocal()) ?? + StreamDateDivider(dateTime: message.createdAt.toLocal()); + }, ); } } diff --git a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart index 995ec161..f1a42cfd 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart @@ -810,13 +810,18 @@ class _StreamMessageListViewState extends State { ), ), if (widget.showFloatingDateDivider) - FloatingDateDivider( - itemCount: itemCount, - reverse: widget.reverse, - itemPositionListener: _itemPositionListener, - messages: messages, - dateDividerBuilder: widget.dateDividerBuilder, - isThreadConversation: _isThreadConversation, + Positioned( + top: 20, + left: 0, + right: 0, + child: FloatingDateDivider( + itemCount: itemCount, + reverse: widget.reverse, + itemPositionListener: _itemPositionListener, + messages: messages, + dateDividerBuilder: widget.dateDividerBuilder, + isThreadConversation: _isThreadConversation, + ), ), ], ); diff --git a/packages/stream_chat_flutter/lib/src/message_list_view/mlv_utils.dart b/packages/stream_chat_flutter/lib/src/message_list_view/mlv_utils.dart index 9524cef9..b1e3d271 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view/mlv_utils.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view/mlv_utils.dart @@ -1,7 +1,4 @@ -import 'dart:async'; - import 'package:collection/collection.dart'; -import 'package:flutter/foundation.dart'; import 'package:stream_chat_flutter/scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; @@ -74,29 +71,3 @@ int? getBottomElementIndex(Iterable values) { bool isInitialMessage(String id, StreamChannelState? channelState) { return channelState!.initialMessageId == id; } - -/// Converts a [ValueListenable] to a [Stream]. -Stream valueListenableToStreamAdapter(ValueListenable listenable) { - late StreamController _controller; - - void listener() { - _controller.add(listenable.value); - } - - void start() { - listenable.addListener(listener); - } - - void end() { - listenable.removeListener(listener); - } - - _controller = StreamController( - onListen: start, - onPause: end, - onResume: start, - onCancel: end, - ); - - return _controller.stream; -}