Merge pull request #1065 from GetStream/change/replace_visibility_detector
fix(ui): Remove Visibility Detector Package
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
-[[#892]](https://github.com/GetStream/stream-chat-flutter/issues/892): Fix default `initialAlignment` in `MessageListView`.
|
-[[#892]](https://github.com/GetStream/stream-chat-flutter/issues/892): Fix default `initialAlignment` in `MessageListView`.
|
||||||
- Fix `MessageInputTheme.inputBackgroundColor` color not being used in some widgets of `MessageInput`
|
- Fix `MessageInputTheme.inputBackgroundColor` color not being used in some widgets of `MessageInput`
|
||||||
|
- Removed dependency on `visibility_detector`
|
||||||
|
|
||||||
## 3.5.1
|
## 3.5.1
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import 'package:stream_chat_flutter/scrollable_positioned_list/scrollable_positi
|
|||||||
import 'package:stream_chat_flutter/src/extension.dart';
|
import 'package:stream_chat_flutter/src/extension.dart';
|
||||||
import 'package:stream_chat_flutter/src/swipeable.dart';
|
import 'package:stream_chat_flutter/src/swipeable.dart';
|
||||||
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
||||||
import 'package:visibility_detector/visibility_detector.dart';
|
|
||||||
|
|
||||||
/// Widget builder for message
|
/// Widget builder for message
|
||||||
/// [defaultMessageWidget] is the default [MessageWidget] configuration
|
/// [defaultMessageWidget] is the default [MessageWidget] configuration
|
||||||
@@ -945,26 +944,7 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
int index,
|
int index,
|
||||||
) {
|
) {
|
||||||
final messageWidget = buildMessage(message, messages, index);
|
final messageWidget = buildMessage(message, messages, index);
|
||||||
return VisibilityDetector(
|
return messageWidget;
|
||||||
key: ValueKey('visibility: ${message.id}'),
|
|
||||||
onVisibilityChanged: (visibility) {
|
|
||||||
final isVisible = visibility.visibleBounds != Rect.zero;
|
|
||||||
if (isVisible) {
|
|
||||||
final channel = streamChannel.channel;
|
|
||||||
if (_upToDate &&
|
|
||||||
channel.config?.readEvents == true &&
|
|
||||||
channel.state!.unreadCount > 0) {
|
|
||||||
streamChannel.channel.markRead();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mounted) {
|
|
||||||
if (_showScrollToBottom.value == isVisible) {
|
|
||||||
_showScrollToBottom.value = !isVisible;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: messageWidget,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget buildParentMessage(
|
Widget buildParentMessage(
|
||||||
@@ -1283,6 +1263,8 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
_scrollController = widget.scrollController ?? ItemScrollController();
|
_scrollController = widget.scrollController ?? ItemScrollController();
|
||||||
_itemPositionListener =
|
_itemPositionListener =
|
||||||
widget.itemPositionListener ?? ItemPositionsListener.create();
|
widget.itemPositionListener ?? ItemPositionsListener.create();
|
||||||
|
_itemPositionListener.itemPositions
|
||||||
|
.addListener(_handleItemPositionsChanged);
|
||||||
|
|
||||||
_getOnThreadTap();
|
_getOnThreadTap();
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -1331,6 +1313,34 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _handleItemPositionsChanged() {
|
||||||
|
final _itemPositions = _itemPositionListener.itemPositions.value.toList();
|
||||||
|
final _firstItemIndex =
|
||||||
|
_itemPositions.indexWhere((element) => element.index == 1);
|
||||||
|
var _isFirstItemVisible = false;
|
||||||
|
if (_firstItemIndex != -1) {
|
||||||
|
final _firstItem = _itemPositions[_firstItemIndex];
|
||||||
|
_isFirstItemVisible =
|
||||||
|
_firstItem.itemLeadingEdge > 0 && _firstItem.itemTrailingEdge < 1;
|
||||||
|
}
|
||||||
|
if (_isFirstItemVisible) {
|
||||||
|
// most recent message is visible
|
||||||
|
final channel = streamChannel?.channel;
|
||||||
|
if (channel != null) {
|
||||||
|
if (_upToDate &&
|
||||||
|
channel.config?.readEvents == true &&
|
||||||
|
channel.state!.unreadCount > 0) {
|
||||||
|
streamChannel!.channel.markRead();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mounted) {
|
||||||
|
if (_showScrollToBottom.value == _isFirstItemVisible) {
|
||||||
|
_showScrollToBottom.value = !_isFirstItemVisible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _getOnThreadTap() {
|
void _getOnThreadTap() {
|
||||||
if (widget.onThreadTap != null) {
|
if (widget.onThreadTap != null) {
|
||||||
_onThreadTap = (Message message) {
|
_onThreadTap = (Message message) {
|
||||||
@@ -1368,6 +1378,8 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
streamChannel!.reloadChannel();
|
streamChannel!.reloadChannel();
|
||||||
}
|
}
|
||||||
_messageNewListener?.cancel();
|
_messageNewListener?.cancel();
|
||||||
|
_itemPositionListener.itemPositions
|
||||||
|
.removeListener(_handleItemPositionsChanged);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ dependencies:
|
|||||||
video_compress: ^3.0.0
|
video_compress: ^3.0.0
|
||||||
video_player: ^2.1.0
|
video_player: ^2.1.0
|
||||||
video_thumbnail: ^0.4.3
|
video_thumbnail: ^0.4.3
|
||||||
visibility_detector: ^0.2.0
|
|
||||||
|
|
||||||
flutter:
|
flutter:
|
||||||
assets:
|
assets:
|
||||||
|
|||||||
Reference in New Issue
Block a user