import 'package:flutter/material.dart'; import '../../../../l10n/app_localizations.dart'; import '../../../../shared/theme/design_tokens.dart'; import '../../data/models/profile_settings.dart'; import '../widgets/settings_section_widgets.dart'; import 'language_settings_screen.dart'; class GeneralSettingsScreen extends StatefulWidget { const GeneralSettingsScreen({ super.key, required this.settings, required this.onSettingsChanged, }); final ProfileSettingsV1 settings; final Future Function(ProfileSettingsV1 settings) onSettingsChanged; @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.settingsInterfaceLanguage, subtitle: displayLanguageLabel( l10n, _settings.preferences.interfaceLanguage, ), tint: colors.primary, background: colors.surfaceContainerHighest, onTap: () => _selectLanguage( _settings.preferences.interfaceLanguage, (lang) => setState(() { _settings = _settings.copyWith( preferences: _settings.preferences.copyWith( interfaceLanguage: lang, ), ); }), ), ), SettingsMenuTile( icon: Icons.smart_toy_rounded, title: l10n.settingsAiLanguage, subtitle: displayLanguageLabel( l10n, _settings.preferences.aiLanguage, ), tint: colors.primary, background: colors.surfaceContainerHighest, showDivider: false, onTap: () => _selectLanguage( _settings.preferences.aiLanguage, (lang) => setState(() { _settings = _settings.copyWith( preferences: _settings.preferences.copyWith( aiLanguage: lang, ), ); }), ), ), ], ), const SizedBox(height: AppSpacing.lg), SectionLabel(text: l10n.settingsSectionPrivacy), SettingsGroupCard( children: [ SettingsSwitchTile( icon: Icons.security_rounded, title: l10n.settingsDoNotSellTitle, value: _settings.privacy.canSell, tint: colors.primary, background: colors.surfaceContainerHighest, showDivider: false, onChanged: (value) => _updatePrivacy(canSell: value), ), ], ), const SizedBox(height: AppSpacing.lg), SectionLabel(text: l10n.settingsSectionNotification), SettingsGroupCard( children: [ SettingsSwitchTile( icon: Icons.notifications_rounded, title: l10n.settingsNotificationAllow, value: _settings.notification.allowNotifications, tint: colors.primary, background: colors.surfaceContainerHighest, onChanged: (value) => _updateNotification(allowNotifications: value), ), SettingsSwitchTile( icon: Icons.vibration_rounded, title: l10n.settingsNotificationVibration, value: _settings.notification.allowVibration, tint: colors.primary, background: colors.surfaceContainerHighest, showDivider: false, onChanged: (value) => _updateNotification(allowVibration: value), ), ], ), ], ), ), ); } Future _selectLanguage( String currentLanguage, void Function(String) onChanged, ) async { final result = await Navigator.of(context).push( MaterialPageRoute( builder: (_) => LanguageSettingsScreen(selectedLanguageTag: currentLanguage), ), ); if (result == null || result == currentLanguage) { return; } onChanged(result); await widget.onSettingsChanged(_settings); } void _updatePrivacy({bool? canSell}) { final newPrivacy = _settings.privacy.copyWith(canSell: canSell); final newSettings = _settings.copyWith(privacy: newPrivacy); setState(() { _settings = newSettings; }); widget.onSettingsChanged(newSettings); } void _updateNotification({bool? allowNotifications, bool? allowVibration}) { final newNotification = _settings.notification.copyWith( allowNotifications: allowNotifications, allowVibration: allowVibration, ); final newSettings = _settings.copyWith(notification: newNotification); setState(() { _settings = newSettings; }); widget.onSettingsChanged(newSettings); } }