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