From fc8ada06924214bdff48b15bef22d75d5a3a65e2 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Fri, 6 Feb 2026 09:26:48 +0100 Subject: [PATCH] Scope filter display-name cache by library context --- lib/screens/libraries/filters_bottom_sheet.dart | 12 ++++++++++-- lib/screens/libraries/tabs/library_browse_tab.dart | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/screens/libraries/filters_bottom_sheet.dart b/lib/screens/libraries/filters_bottom_sheet.dart index 629aff18..970d0368 100644 --- a/lib/screens/libraries/filters_bottom_sheet.dart +++ b/lib/screens/libraries/filters_bottom_sheet.dart @@ -14,6 +14,7 @@ class FiltersBottomSheet extends StatefulWidget { final Map selectedFilters; final Function(Map) onFiltersChanged; final String serverId; + final String libraryKey; const FiltersBottomSheet({ super.key, @@ -21,6 +22,7 @@ class FiltersBottomSheet extends StatefulWidget { required this.selectedFilters, required this.onFiltersChanged, required this.serverId, + required this.libraryKey, }); @override @@ -33,9 +35,12 @@ class _FiltersBottomSheetState extends State { bool _isLoadingValues = false; final Map _tempSelectedFilters = {}; static final Map _filterDisplayNames = {}; // Cache for display names + static const int _maxCachedDisplayNames = 1000; late List _sortedFilters; late final FocusNode _initialFocusNode; + String _cacheKey(String filter, String value) => '${widget.serverId}:${widget.libraryKey}:$filter:$value'; + @override void initState() { super.initState(); @@ -165,7 +170,10 @@ class _FiltersBottomSheetState extends State { setState(() { _tempSelectedFilters[_currentFilter!.filter] = filterValue; // Cache the display name for this filter value - _filterDisplayNames['${_currentFilter!.filter}:$filterValue'] = value.title; + if (_filterDisplayNames.length > _maxCachedDisplayNames) { + _filterDisplayNames.clear(); + } + _filterDisplayNames[_cacheKey(_currentFilter!.filter, filterValue)] = value.title; }); _applyFilters(); }, @@ -233,7 +241,7 @@ class _FiltersBottomSheetState extends State { String? displayValue; if (selectedValue != null) { // Try to get the cached display name, fall back to the value itself - displayValue = _filterDisplayNames['${filter.filter}:$selectedValue'] ?? selectedValue; + displayValue = _filterDisplayNames[_cacheKey(filter.filter, selectedValue)] ?? selectedValue; } return FocusableListTile( diff --git a/lib/screens/libraries/tabs/library_browse_tab.dart b/lib/screens/libraries/tabs/library_browse_tab.dart index 5d02adb3..5c164eed 100644 --- a/lib/screens/libraries/tabs/library_browse_tab.dart +++ b/lib/screens/libraries/tabs/library_browse_tab.dart @@ -473,6 +473,7 @@ class _LibraryBrowseTabState extends BaseLibraryTabState