diff --git a/mobile/lib/ui/viewer/people/person_cluster_suggestion.dart b/mobile/lib/ui/viewer/people/person_cluster_suggestion.dart index bf30f928c7..ff9b1e7559 100644 --- a/mobile/lib/ui/viewer/people/person_cluster_suggestion.dart +++ b/mobile/lib/ui/viewer/people/person_cluster_suggestion.dart @@ -1,4 +1,4 @@ -import "dart:async" show unawaited; +import "dart:async" show StreamSubscription, unawaited; import "dart:math"; import "package:flutter/foundation.dart" show kDebugMode; @@ -30,16 +30,25 @@ class PersonReviewClusterSuggestion extends StatefulWidget { class _PersonClustersState extends State { int currentSuggestionIndex = 0; + bool fetch = true; Key futureBuilderKey = UniqueKey(); // Declare a variable for the future late Future> futureClusterSuggestions; + late StreamSubscription _peopleChangedEvent; @override void initState() { super.initState(); // Initialize the future in initState - _fetchClusterSuggestions(); + if (fetch) _fetchClusterSuggestions(); + fetch = true; + } + + @override + void dispose() { + _peopleChangedEvent.cancel(); + super.dispose(); } @override @@ -62,6 +71,7 @@ class _PersonClustersState extends State { ), ); } + final allSuggestions = snapshot.data!; final numberOfDifferentSuggestions = allSuggestions.length; final currentSuggestion = allSuggestions[currentSuggestionIndex]; @@ -69,6 +79,19 @@ class _PersonClustersState extends State { final double distance = currentSuggestion.distancePersonToCluster; final bool usingMean = currentSuggestion.usedOnlyMeanForSuggestion; final List files = currentSuggestion.filesInCluster; + + _peopleChangedEvent = + Bus.instance.on().listen((event) { + if (event.type == PeopleEventType.removedFilesFromCluster && + (event.source == clusterID.toString())) { + for (var updatedFile in event.relevantFiles!) { + files.remove(updatedFile); + } + fetch = false; + setState(() {}); + } + }); + return InkWell( onTap: () { Navigator.of(context).push( @@ -161,7 +184,7 @@ class _PersonClustersState extends State { List allSuggestions, ) { final widgetToReturn = Column( - key: ValueKey("cluster_id-$clusterID"), + key: ValueKey("cluster_id-$clusterID-files-${files.length}"), children: [ if (kDebugMode) Text(