diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index bfaae76a..8b132f02 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1754,6 +1754,26 @@ class ChannelClientState { )); } + void _listenUserStartWatching() { + _subscriptions.add( + _channel.on(EventType.userWatchingStart).listen((event) { + if (event.user != null) { + _incrementWatcher(event.user!); + } + }), + ); + } + + void _listenUserStopWatching() { + _subscriptions.add( + _channel.on(EventType.userWatchingStop).listen((event) { + if (event.user != null) { + channelState.watchers?.remove(event.user); + } + }), + ); + } + void _listenMemberUnbanned() { _subscriptions.add(_channel .on(EventType.userUnbanned) @@ -1770,6 +1790,19 @@ class ChannelClientState { )); } + void _incrementWatcher(User user) { + List newWatchers; + + if (channelState.watchers == null) { + channelState.watchers!.add(user); + newWatchers = channelState.watchers!; + } else { + newWatchers = [user]; + } + + channelState.copyWith(watchers: newWatchers); + } + void _updateMember(Member member) { final currentMembers = [...members]; final memberIndex = currentMembers.indexWhere( diff --git a/packages/stream_chat/lib/src/event_type.dart b/packages/stream_chat/lib/src/event_type.dart index b553943e..f8fb7ed7 100644 --- a/packages/stream_chat/lib/src/event_type.dart +++ b/packages/stream_chat/lib/src/event_type.dart @@ -36,6 +36,12 @@ class EventType { /// Event sent when updating a message static const String messageUpdated = 'message.updated'; + /// Event sent when a user starts watching a channel + static const String userWatchingStart = 'user.watching.start'; + + /// Event sent when a user stops watching a channel + static const String userWatchingStop = 'user.watching.stop'; + /// Event sent when reading a message static const String messageRead = 'message.read';