From 8f326e692d830250fe7e2302bb4db9cfff27c93f Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sat, 4 Apr 2026 16:30:13 +0200 Subject: [PATCH] fix: dpad nav trapping in density slider --- .../settings/appearance_settings_screen.dart | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/screens/settings/appearance_settings_screen.dart b/lib/screens/settings/appearance_settings_screen.dart index 5f04831f..50e9ff84 100644 --- a/lib/screens/settings/appearance_settings_screen.dart +++ b/lib/screens/settings/appearance_settings_screen.dart @@ -7,6 +7,8 @@ import '../../providers/settings_provider.dart'; import '../../providers/theme_provider.dart'; import '../../providers/user_profile_provider.dart'; import '../../services/settings_service.dart' as settings; +import '../../focus/dpad_navigator.dart'; +import '../../focus/focusable_wrapper.dart'; import '../../utils/platform_detector.dart'; import '../../widgets/app_icon.dart'; import '../../widgets/focused_scroll_scaffold.dart'; @@ -148,12 +150,28 @@ class _AppearanceSettingsScreenState extends State { const SizedBox(width: 16), Text(t.settings.compact, style: const TextStyle(fontSize: 12, color: Colors.grey)), Expanded( - child: Slider( - value: settingsProvider.libraryDensity.toDouble(), - min: 1, - max: 5, - divisions: 4, - onChanged: (value) => settingsProvider.setLibraryDensity(value.round()), + child: FocusableWrapper( + descendantsAreFocusable: false, + disableScale: true, + onKeyEvent: (node, event) { + final key = event.logicalKey; + if (key.isLeftKey || key.isRightKey) { + if (event.isActionable) { + final delta = key.isRightKey ? 1 : -1; + final newValue = (settingsProvider.libraryDensity + delta).clamp(1, 5); + settingsProvider.setLibraryDensity(newValue); + } + return KeyEventResult.handled; + } + return KeyEventResult.ignored; + }, + child: Slider( + value: settingsProvider.libraryDensity.toDouble(), + min: 1, + max: 5, + divisions: 4, + onChanged: (value) => settingsProvider.setLibraryDensity(value.round()), + ), ), ), Text(t.settings.comfortable, style: const TextStyle(fontSize: 12, color: Colors.grey)),