diff --git a/lib/widgets/filter_grids/albums_page.dart b/lib/widgets/filter_grids/albums_page.dart index e640c50bf..1fe283f34 100644 --- a/lib/widgets/filter_grids/albums_page.dart +++ b/lib/widgets/filter_grids/albums_page.dart @@ -26,6 +26,11 @@ class AlbumListPage extends StatelessWidget { final source = context.read(); return Selector>>( selector: (context, s) => Tuple3(s.albumGroupFactor, s.albumSortFactor, s.pinnedFilters), + shouldRebuild: (t1, t2) { + // `Selector` by default uses `DeepCollectionEquality`, which does not go deep in collections within `TupleN` + const eq = DeepCollectionEquality(); + return !(eq.equals(t1.item1, t2.item1) && eq.equals(t1.item2, t2.item2) && eq.equals(t1.item3, t2.item3)); + }, builder: (context, s, child) { return AnimatedBuilder( animation: androidFileUtils.appNameChangeNotifier, diff --git a/lib/widgets/filter_grids/countries_page.dart b/lib/widgets/filter_grids/countries_page.dart index a759cfcea..84f81beb1 100644 --- a/lib/widgets/filter_grids/countries_page.dart +++ b/lib/widgets/filter_grids/countries_page.dart @@ -25,6 +25,11 @@ class CountryListPage extends StatelessWidget { final source = context.read(); return Selector>>( selector: (context, s) => Tuple2(s.countrySortFactor, s.pinnedFilters), + shouldRebuild: (t1, t2) { + // `Selector` by default uses `DeepCollectionEquality`, which does not go deep in collections within `TupleN` + const eq = DeepCollectionEquality(); + return !(eq.equals(t1.item1, t2.item1) && eq.equals(t1.item2, t2.item2)); + }, builder: (context, s, child) { return StreamBuilder( stream: source.eventBus.on(), diff --git a/lib/widgets/filter_grids/tags_page.dart b/lib/widgets/filter_grids/tags_page.dart index b6f05e5c1..f9b1f1768 100644 --- a/lib/widgets/filter_grids/tags_page.dart +++ b/lib/widgets/filter_grids/tags_page.dart @@ -25,6 +25,11 @@ class TagListPage extends StatelessWidget { final source = context.read(); return Selector>>( selector: (context, s) => Tuple2(s.tagSortFactor, s.pinnedFilters), + shouldRebuild: (t1, t2) { + // `Selector` by default uses `DeepCollectionEquality`, which does not go deep in collections within `TupleN` + const eq = DeepCollectionEquality(); + return !(eq.equals(t1.item1, t2.item1) && eq.equals(t1.item2, t2.item2)); + }, builder: (context, s, child) { return StreamBuilder( stream: source.eventBus.on(),