diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index ede692e6..a17df330 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -9,6 +9,7 @@ - Added `PaginationParams.createdAtAround` for message pagination. - Added support for `channel.disabled`, `channel.hidden` and `channel.truncatedAt` in `Channel`. - Added support for `channel.membership` and `channel.membershipStream` in `Channel`. +- `Channel` now listens for `member.updated` events and updates the `Channel.members` accordingly. 🔄 Changed diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 18528e93..b4e1379d 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1588,6 +1588,8 @@ class ChannelClientState { _listenMemberRemoved(); + _listenMemberUpdated(); + _listenMemberBanned(); _listenMemberUnbanned(); @@ -1680,6 +1682,18 @@ class ChannelClientState { })); } + void _listenMemberUpdated() { + _subscriptions.add(_channel.on(EventType.memberUpdated).listen((Event e) { + final member = e.member; + final existingMembers = channelState.members ?? []; + updateChannelState(channelState.copyWith( + members: existingMembers + .map((m) => m.userId == member!.userId ? member : m) + .toList(growable: false), + )); + })); + } + void _listenChannelUpdated() { _subscriptions.add(_channel.on(EventType.channelUpdated).listen((Event e) { final channel = e.channel!; diff --git a/packages/stream_chat/lib/src/event_type.dart b/packages/stream_chat/lib/src/event_type.dart index 80628f2f..b553943e 100644 --- a/packages/stream_chat/lib/src/event_type.dart +++ b/packages/stream_chat/lib/src/event_type.dart @@ -73,6 +73,9 @@ class EventType { /// Event sent when a member is removed to a channel static const String memberRemoved = 'member.removed'; + /// Event sent when a member is updated in a channel + static const String memberUpdated = 'member.updated'; + /// Event sent when a member is removed to a channel static const String userBanned = 'user.banned';