From 655d9602e0944335f46e42c347b6e79938e0a0c8 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 7 Nov 2024 21:47:58 +0530 Subject: [PATCH] [mob][photos] Dispose all notifiers of SearchFilterDataProvider after use --- .../ui/viewer/gallery/collection_page.dart | 2 +- .../state/inherited_search_filter_data.dart | 34 +++++++++++++++++++ .../state/search_filter_data_provider.dart | 6 ++++ .../ui/viewer/gallery/uncategorized_page.dart | 2 +- .../ui/viewer/location/location_screen.dart | 2 +- mobile/lib/ui/viewer/people/people_page.dart | 2 +- .../search/result/magic_result_screen.dart | 2 +- .../search/result/search_result_page.dart | 2 +- 8 files changed, 46 insertions(+), 6 deletions(-) diff --git a/mobile/lib/ui/viewer/gallery/collection_page.dart b/mobile/lib/ui/viewer/gallery/collection_page.dart index d17a14c81f..b4f1a12c82 100644 --- a/mobile/lib/ui/viewer/gallery/collection_page.dart +++ b/mobile/lib/ui/viewer/gallery/collection_page.dart @@ -106,7 +106,7 @@ class CollectionPage extends StatelessWidget { ); return GalleryFilesState( - child: InheritedSearchFilterData( + child: InheritedSearchFilterDataWrapper( searchFilterDataProvider: SearchFilterDataProvider( initialGalleryFilter: AlbumFilter( collectionID: c.collection.id, diff --git a/mobile/lib/ui/viewer/gallery/state/inherited_search_filter_data.dart b/mobile/lib/ui/viewer/gallery/state/inherited_search_filter_data.dart index 09771ddd2d..ff0cd40a7a 100644 --- a/mobile/lib/ui/viewer/gallery/state/inherited_search_filter_data.dart +++ b/mobile/lib/ui/viewer/gallery/state/inherited_search_filter_data.dart @@ -1,6 +1,40 @@ import "package:flutter/material.dart"; import "package:photos/ui/viewer/gallery/state/search_filter_data_provider.dart"; +class InheritedSearchFilterDataWrapper extends StatefulWidget { + const InheritedSearchFilterDataWrapper({ + super.key, + required this.child, + required this.searchFilterDataProvider, + }); + + final Widget child; + final SearchFilterDataProvider? searchFilterDataProvider; + + @override + State createState() => + _InheritedSearchFilterDataWrapperState(); +} + +class _InheritedSearchFilterDataWrapperState + extends State { + @override + void dispose() { + widget.searchFilterDataProvider?.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return InheritedSearchFilterData( + searchFilterDataProvider: widget.searchFilterDataProvider, + child: widget.child, + ); + } +} + +/// Use [InheritedSearchFilterDataWrapper] instead if using +/// [InheritedSearchFilterData] as a parent widget class InheritedSearchFilterData extends InheritedWidget { const InheritedSearchFilterData({ super.key, diff --git a/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart b/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart index c78c4ab027..9bed8ad445 100644 --- a/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart +++ b/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart @@ -112,6 +112,12 @@ class SearchFilterDataProvider { filtersToAvoid: filtersToAvoid, ); } + + void dispose() { + _appliedFiltersNotifier.dispose(); + _recommendedFiltersNotifier.dispose(); + isSearchingNotifier.dispose(); + } } class _AppliedFiltersNotifier extends ChangeNotifier { diff --git a/mobile/lib/ui/viewer/gallery/uncategorized_page.dart b/mobile/lib/ui/viewer/gallery/uncategorized_page.dart index 417a8400a2..a6dbffcbf1 100644 --- a/mobile/lib/ui/viewer/gallery/uncategorized_page.dart +++ b/mobile/lib/ui/viewer/gallery/uncategorized_page.dart @@ -80,7 +80,7 @@ class UnCategorizedPage extends StatelessWidget { albumName: S.of(context).uncategorized, ); return GalleryFilesState( - child: InheritedSearchFilterData( + child: InheritedSearchFilterDataWrapper( searchFilterDataProvider: SearchFilterDataProvider( initialGalleryFilter: AlbumFilter( collectionID: collection.id, diff --git a/mobile/lib/ui/viewer/location/location_screen.dart b/mobile/lib/ui/viewer/location/location_screen.dart index 9354b60140..d76360763a 100644 --- a/mobile/lib/ui/viewer/location/location_screen.dart +++ b/mobile/lib/ui/viewer/location/location_screen.dart @@ -47,7 +47,7 @@ class _LocationScreenState extends State { InheritedLocationScreenState.of(context).locationTagEntity.item; return GalleryFilesState( - child: InheritedSearchFilterData( + child: InheritedSearchFilterDataWrapper( searchFilterDataProvider: SearchFilterDataProvider( initialGalleryFilter: LocationFilter( locationTag: locationTag, diff --git a/mobile/lib/ui/viewer/people/people_page.dart b/mobile/lib/ui/viewer/people/people_page.dart index 265a8cda18..2534df7189 100644 --- a/mobile/lib/ui/viewer/people/people_page.dart +++ b/mobile/lib/ui/viewer/people/people_page.dart @@ -117,7 +117,7 @@ class _PeoplePageState extends State { Widget build(BuildContext context) { _logger.info("Building for ${widget.person.data.name}"); return GalleryFilesState( - child: InheritedSearchFilterData( + child: InheritedSearchFilterDataWrapper( searchFilterDataProvider: widget.searchResult != null ? SearchFilterDataProvider( initialGalleryFilter: diff --git a/mobile/lib/ui/viewer/search/result/magic_result_screen.dart b/mobile/lib/ui/viewer/search/result/magic_result_screen.dart index aec6a3ef76..b3f1b72d44 100644 --- a/mobile/lib/ui/viewer/search/result/magic_result_screen.dart +++ b/mobile/lib/ui/viewer/search/result/magic_result_screen.dart @@ -163,7 +163,7 @@ class _MagicResultScreenState extends State { initialFiles: [files.first], ); return GalleryFilesState( - child: InheritedSearchFilterData( + child: InheritedSearchFilterDataWrapper( searchFilterDataProvider: SearchFilterDataProvider( initialGalleryFilter: widget.magicFilter, ), diff --git a/mobile/lib/ui/viewer/search/result/search_result_page.dart b/mobile/lib/ui/viewer/search/result/search_result_page.dart index 740cf60790..19a3c7f25e 100644 --- a/mobile/lib/ui/viewer/search/result/search_result_page.dart +++ b/mobile/lib/ui/viewer/search/result/search_result_page.dart @@ -97,7 +97,7 @@ class _SearchResultPageState extends State { ); return GalleryFilesState( - child: InheritedSearchFilterData( + child: InheritedSearchFilterDataWrapper( searchFilterDataProvider: SearchFilterDataProvider( initialGalleryFilter: widget.searchResult.getHierarchicalSearchFilter(),