From b5fe810aa1730f53bb91f0f67531d7271d5509d1 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Mon, 25 Aug 2025 10:35:45 -0400 Subject: [PATCH] fix: fully load analytics room member list in analytics request indicator (#3799) --- .../analytics_request_indicator.dart | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/pangea/space_analytics/analytics_request_indicator.dart b/lib/pangea/space_analytics/analytics_request_indicator.dart index 81f73c5e2..317dfb92e 100644 --- a/lib/pangea/space_analytics/analytics_request_indicator.dart +++ b/lib/pangea/space_analytics/analytics_request_indicator.dart @@ -26,23 +26,43 @@ class AnalyticsRequestIndicator extends StatefulWidget { class AnalyticsRequestIndicatorState extends State { AnalyticsRequestIndicatorState(); - Map> get _knockingAdmins { + final Map> _knockingAdmins = {}; + + @override + void initState() { + super.initState(); + _fetchKnockingAdmins(); + } + + @override + void didUpdateWidget(covariant AnalyticsRequestIndicator oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.room.id != widget.room.id) { + _fetchKnockingAdmins(); + } + } + + Future _fetchKnockingAdmins() async { + setState(() => _knockingAdmins.clear()); + final admins = widget.room.getParticipants().where((u) => u.powerLevel >= 100); - final knockingAdmins = >{}; for (final analyticsRoom in widget.room.client.allMyAnalyticsRooms) { - final knocking = analyticsRoom.getParticipants([Membership.knock]); + final knocking = + await analyticsRoom.requestParticipants([Membership.knock]); if (knocking.isEmpty) continue; for (final admin in admins) { if (knocking.any((u) => u.id == admin.id)) { - knockingAdmins.putIfAbsent(admin, () => []).add(analyticsRoom); + _knockingAdmins.putIfAbsent(admin, () => []).add(analyticsRoom); } } } - return knockingAdmins; + if (mounted) { + setState(() {}); + } } Future _onTap(BuildContext context) async { @@ -71,7 +91,7 @@ class AnalyticsRequestIndicatorState extends State { }, ); - if (mounted) setState(() {}); + if (mounted) _fetchKnockingAdmins(); } @override