fix(ui): harden settings focus and semantics

This commit is contained in:
edde746
2026-07-24 03:46:50 +02:00
parent f8bfecf57d
commit b41fb4fe75
159 changed files with 12054 additions and 2050 deletions
+7 -9
View File
@@ -6,21 +6,19 @@ import 'expressive_button_group.dart';
/// Standard settings-option title style.
///
/// Matches Flutter's dense ListTile title size so custom controls and
/// ordinary settings rows keep the same hierarchy. TV retains the larger
/// body style used for D-pad readability at distance.
/// Mobile uses Flutter's compact ListTile title size. Desktop and TV retain
/// the larger body style used for pointer and D-pad readability.
TextStyle? settingsOptionTitleStyle(BuildContext context) {
final style = Theme.of(context).textTheme.bodyLarge;
return PlatformDetector.isTV() ? style : style?.copyWith(fontSize: 13);
return PlatformDetector.isMobile(context) ? style?.copyWith(fontSize: 13) : style;
}
/// Standard settings-row density, paired with [settingsOptionTitleStyle]:
/// compact rows everywhere except TV, where full-height rows keep D-pad
/// readability.
bool settingsRowDense() => !PlatformDetector.isTV();
/// compact on mobile and full-height on desktop and TV.
bool settingsRowDense(BuildContext context) => PlatformDetector.isMobile(context);
VisualDensity settingsRowVisualDensity() =>
settingsRowDense() ? const VisualDensity(vertical: -3) : VisualDensity.standard;
VisualDensity settingsRowVisualDensity(BuildContext context) =>
settingsRowDense(context) ? const VisualDensity(vertical: -3) : VisualDensity.standard;
class SettingsSectionHeader extends StatelessWidget {
final String title;