From 74be947f0f9c09ee644fb6975ac23a0871a68a38 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 30 Jan 2026 13:52:21 -0500 Subject: [PATCH] fix: use stream to always update saved activity list on language update (#5541) --- .../analytics_page/activity_archive.dart | 87 +++++++++++-------- 1 file changed, 49 insertions(+), 38 deletions(-) diff --git a/lib/pangea/analytics_page/activity_archive.dart b/lib/pangea/analytics_page/activity_archive.dart index c9ae71625..c76bdff96 100644 --- a/lib/pangea/analytics_page/activity_archive.dart +++ b/lib/pangea/analytics_page/activity_archive.dart @@ -26,47 +26,58 @@ class ActivityArchive extends StatelessWidget { @override Widget build(BuildContext context) { - final Room? analyticsRoom = Matrix.of(context).client.analyticsRoomLocal(); - final archive = analyticsRoom?.archivedActivities ?? []; - final selectedRoomId = GoRouterState.of(context).pathParameters['roomid']; - return Scaffold( - body: SafeArea( - child: Padding( - padding: const EdgeInsetsGeometry.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const LearningProgressIndicators( - selected: ProgressIndicatorEnum.activities, - ), - Expanded( - child: MaxWidthBody( - withScrolling: false, - child: ListView.builder( - physics: const ClampingScrollPhysics(), - itemCount: archive.length + 1, - itemBuilder: (BuildContext context, int i) { - if (i == 0) { - return InstructionsInlineTooltip( - instructionsEnum: archive.isEmpty - ? InstructionsEnum.noSavedActivitiesYet - : InstructionsEnum.activityAnalyticsList, - padding: const EdgeInsets.all(8.0), - ); - } - i--; - return AnalyticsActivityItem( - room: archive[i], - selected: archive[i].id == selectedRoomId, - ); - }, + return StreamBuilder( + stream: Matrix.of(context) + .analyticsDataService + .updateDispatcher + .activityAnalyticsStream + .stream, + builder: (context, _) { + final Room? analyticsRoom = + Matrix.of(context).client.analyticsRoomLocal(); + final archive = analyticsRoom?.archivedActivities ?? []; + final selectedRoomId = + GoRouterState.of(context).pathParameters['roomid']; + return Scaffold( + body: SafeArea( + child: Padding( + padding: const EdgeInsetsGeometry.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const LearningProgressIndicators( + selected: ProgressIndicatorEnum.activities, ), - ), + Expanded( + child: MaxWidthBody( + withScrolling: false, + child: ListView.builder( + physics: const ClampingScrollPhysics(), + itemCount: archive.length + 1, + itemBuilder: (BuildContext context, int i) { + if (i == 0) { + return InstructionsInlineTooltip( + instructionsEnum: archive.isEmpty + ? InstructionsEnum.noSavedActivitiesYet + : InstructionsEnum.activityAnalyticsList, + padding: const EdgeInsets.all(8.0), + ); + } + i--; + return AnalyticsActivityItem( + room: archive[i], + selected: archive[i].id == selectedRoomId, + ); + }, + ), + ), + ), + ], ), - ], + ), ), - ), - ), + ); + }, ); } }