From f207654ff51a105d50c744b1fffb7a00db6e5689 Mon Sep 17 00:00:00 2001 From: Krushna Kanta Rout <129386740+krushnarout@users.noreply.github.com> Date: Sat, 18 Jul 2026 22:36:36 +0530 Subject: [PATCH] feat(app): move This Device memory filter into the filter sheet Moves the This Device chip out of the memories search row and into the filter bottom sheet (opened by the last icon on the search row), below the category options and separated by a divider. Co-Authored-By: Claude Fable 5 --- app/lib/pages/memories/page.dart | 10 ------ .../widgets/memory_management_sheet.dart | 36 +++++++++++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/app/lib/pages/memories/page.dart b/app/lib/pages/memories/page.dart index 4eeec8fef73..6be673d18b3 100644 --- a/app/lib/pages/memories/page.dart +++ b/app/lib/pages/memories/page.dart @@ -211,8 +211,6 @@ class MemoriesPageState extends State with AutomaticKeepAliveClien SizedBox(width: 44, height: 44, child: _buildShimmerButton()), const SizedBox(width: 8), SizedBox(width: 44, height: 44, child: _buildShimmerButton()), - const SizedBox(width: 8), - SizedBox(width: 44, height: 44, child: _buildShimmerButton()), ], ), ), @@ -293,14 +291,6 @@ class MemoriesPageState extends State with AutomaticKeepAliveClien }, ), const SizedBox(width: 8), - FilterChip( - label: Text(context.l10n.memoryThisDevice, style: const TextStyle(fontSize: 12)), - selected: provider.filterThisDeviceOnly, - onSelected: provider.setFilterThisDeviceOnly, - visualDensity: VisualDensity.compact, - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - ), - const SizedBox(width: 8), SizedBox( width: 44, height: 44, diff --git a/app/lib/pages/memories/widgets/memory_management_sheet.dart b/app/lib/pages/memories/widgets/memory_management_sheet.dart index d94e3400917..60644117a91 100644 --- a/app/lib/pages/memories/widgets/memory_management_sheet.dart +++ b/app/lib/pages/memories/widgets/memory_management_sheet.dart @@ -65,16 +65,26 @@ class MemoryManagementSheet extends StatelessWidget { padding: const EdgeInsets.fromLTRB(20, 16, 16, 8), child: Text(context.l10n.filterMemories, style: AppStyles.title), ), - _buildFilterOption(context, context.l10n.filterAll, null), - _buildFilterOption(context, context.l10n.filterSystem, MemoryCategory.system), - _buildFilterOption(context, context.l10n.filterInteresting, MemoryCategory.interesting), - _buildFilterOption(context, context.l10n.filterManual, MemoryCategory.manual), + _buildCategoryFilterOption(context, context.l10n.filterAll, null), + _buildCategoryFilterOption(context, context.l10n.filterSystem, MemoryCategory.system), + _buildCategoryFilterOption(context, context.l10n.filterInteresting, MemoryCategory.interesting), + _buildCategoryFilterOption(context, context.l10n.filterManual, MemoryCategory.manual), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 20, vertical: 8), + child: Divider(height: 1, color: Colors.white10), + ), + _buildFilterOption( + context, + context.l10n.memoryThisDevice, + isSelected: provider.filterThisDeviceOnly, + onTap: () => provider.setFilterThisDeviceOnly(!provider.filterThisDeviceOnly), + ), const SizedBox(height: 16), ], ); } - Widget _buildFilterOption(BuildContext context, String label, MemoryCategory? category) { + Widget _buildCategoryFilterOption(BuildContext context, String label, MemoryCategory? category) { // If category is null, it represents "All" // For "All", it is selected if the set is empty. final bool isSelected; @@ -84,7 +94,10 @@ class MemoryManagementSheet extends StatelessWidget { isSelected = provider.selectedCategories.contains(category); } - return InkWell( + return _buildFilterOption( + context, + label, + isSelected: isSelected, onTap: () { if (category == null) { provider.clearCategoryFilter(); @@ -93,6 +106,17 @@ class MemoryManagementSheet extends StatelessWidget { } // Do NOT pop here to allow multiple selections }, + ); + } + + Widget _buildFilterOption( + BuildContext context, + String label, { + required bool isSelected, + required VoidCallback onTap, + }) { + return InkWell( + onTap: onTap, child: Container( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), child: Row(