From 06c2047f770992934e155684dd9110fe0db72982 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 18 Feb 2026 13:11:38 -0500 Subject: [PATCH] fix: refresh knocking users indicator on space ID change (#5745) --- .../spaces/knocking_users_indicator.dart | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/lib/pangea/spaces/knocking_users_indicator.dart b/lib/pangea/spaces/knocking_users_indicator.dart index fc9d2e666..f5e0fbd26 100644 --- a/lib/pangea/spaces/knocking_users_indicator.dart +++ b/lib/pangea/spaces/knocking_users_indicator.dart @@ -28,7 +28,30 @@ class KnockingUsersIndicatorState extends State { @override void initState() { super.initState(); - _memberSubscription ??= widget.room.client.onRoomState.stream + _setKnockingSubscription(); + } + + @override + void didUpdateWidget(covariant KnockingUsersIndicator oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.room.id != widget.room.id) { + _setKnockingSubscription(); + } + } + + @override + void dispose() { + _memberSubscription?.cancel(); + super.dispose(); + } + + bool _isMemberUpdate(({String roomId, StrippedStateEvent state}) event) => + event.roomId == widget.room.id && + event.state.type == EventTypes.RoomMember; + + void _setKnockingSubscription() { + _memberSubscription?.cancel(); + _memberSubscription = widget.room.client.onRoomState.stream .where(_isMemberUpdate) .rateLimit(const Duration(seconds: 1)) .listen((_) => _setKnockingUsers()); @@ -42,16 +65,6 @@ class KnockingUsersIndicatorState extends State { .then((_) => _setKnockingUsers()); } - bool _isMemberUpdate(({String roomId, StrippedStateEvent state}) event) => - event.roomId == widget.room.id && - event.state.type == EventTypes.RoomMember; - - @override - void dispose() { - _memberSubscription?.cancel(); - super.dispose(); - } - void _setKnockingUsers() { if (mounted) { setState(() {