fix: refresh knocking users indicator on space ID change (#5745)

This commit is contained in:
ggurdin 2026-02-18 13:11:38 -05:00 committed by GitHub
parent 2dae236706
commit 06c2047f77
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -28,7 +28,30 @@ class KnockingUsersIndicatorState extends State<KnockingUsersIndicator> {
@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<KnockingUsersIndicator> {
.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(() {