diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 6ac8b580..5f98480f 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -8,10 +8,11 @@ - Added `PaginationParams.createdAtBefore` for message pagination. - Added `PaginationParams.createdAtAround` for message pagination. - Added support for `channel.membership` and `channel.membershipStream` in `Channel`. +- `Channel` now listens for `member.updated` events and updates the `Channel.members` accordingly. 🔄 Changed -- Deprecated `PaginationParams.before` and `PaginationParams.after`. Use `PaginationParams.limit` instead. +- Deprecated `PaginationParams.before` and `PaginationParams.after`. Use `PaginationParams.limit` instead. ## 4.1.0 diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 6076a57f..dd8518ab 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1552,6 +1552,8 @@ class ChannelClientState { _listenMemberRemoved(); + _listenMemberUpdated(); + _listenMemberBanned(); _listenMemberUnbanned(); @@ -1644,6 +1646,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';