import 'package:flutter/material.dart'; import '../../../../l10n/app_localizations.dart'; import '../../../../shared/theme/design_tokens.dart'; import '../../data/models/profile_settings.dart'; import 'language_settings_screen.dart'; import '../widgets/settings_section_widgets.dart'; class GeneralSettingsScreen extends StatefulWidget { const GeneralSettingsScreen({ super.key, required this.settings, required this.onInterfaceLanguageChanged, }); final ProfileSettingsV1 settings; final Future Function(String languageTag) onInterfaceLanguageChanged; @override State createState() => _GeneralSettingsScreenState(); } class _GeneralSettingsScreenState extends State { late ProfileSettingsV1 _settings; @override void initState() { super.initState(); _settings = widget.settings; } @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; final colors = Theme.of(context).colorScheme; return PopScope( canPop: false, onPopInvokedWithResult: (didPop, result) { if (didPop) { return; } Navigator.of(context).pop(_settings); }, child: Scaffold( backgroundColor: colors.surfaceContainerLow, appBar: AppBar( leading: IconButton( onPressed: () => Navigator.of(context).pop(_settings), icon: const Icon(Icons.arrow_back_ios_new_rounded), ), title: Text(l10n.settingsGeneralTitle), centerTitle: true, backgroundColor: colors.surfaceContainerLow, surfaceTintColor: colors.surfaceContainerLow, ), body: ListView( padding: const EdgeInsets.all(AppSpacing.lg), children: [ SectionLabel(text: l10n.settingsSectionGeneral), SettingsGroupCard( children: [ SettingsMenuTile( icon: Icons.language_rounded, title: l10n.language, subtitle: displayLanguageLabel( l10n, _settings.preferences.interfaceLanguage, ), tint: colors.primary, background: colors.surfaceContainerHighest, showDivider: false, onTap: _openLanguageSettings, ), ], ), ], ), ), ); } Future _openLanguageSettings() async { final result = await Navigator.of(context).push( MaterialPageRoute( builder: (_) => LanguageSettingsScreen( selectedLanguageTag: _settings.preferences.interfaceLanguage, ), ), ); if (result == null || result == _settings.preferences.interfaceLanguage) { return; } await widget.onInterfaceLanguageChanged(result); if (!mounted) { return; } setState(() { _settings = _settings.copyWith( preferences: _settings.preferences.copyWith(interfaceLanguage: result), ); }); } }