import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/constants.dart'; import '../../../core/l10n/locale_provider.dart'; import '../provider.dart'; class ThemeSection extends ConsumerWidget { const ThemeSection({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final s = ref.watch(stringsProvider); final themeMode = ref.watch(themeProvider); final isDark = Theme.of(context).brightness == Brightness.dark; return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, borderRadius: BorderRadius.circular(16), border: isDark ? null : Border.all(color: const Color(0xFFDDDDEE), width: 1), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: AppColors.accent.withOpacity(0.15), borderRadius: BorderRadius.circular(12), ), child: Icon( themeMode == ThemeMode.dark ? Icons.dark_mode_rounded : themeMode == ThemeMode.light ? Icons.light_mode_rounded : Icons.brightness_auto_rounded, color: AppColors.accent, size: 20, ), ), const SizedBox(width: 12), Text( s.theme, style: Theme.of(context).textTheme.titleMedium?.copyWith( fontWeight: FontWeight.w600, color: Theme.of(context).colorScheme.onSurface, ), ), ], ), const SizedBox(height: 16), Row( children: [ Expanded( child: _ThemeOption( label: s.themeDark, icon: Icons.dark_mode_rounded, isSelected: themeMode == ThemeMode.dark, onTap: () => ref.read(themeProvider.notifier).setThemeMode(ThemeMode.dark), ), ), const SizedBox(width: 8), Expanded( child: _ThemeOption( label: s.themeSystem, icon: Icons.brightness_auto_rounded, isSelected: themeMode == ThemeMode.system, onTap: () => ref.read(themeProvider.notifier).setThemeMode(ThemeMode.system), ), ), const SizedBox(width: 8), Expanded( child: _ThemeOption( label: s.themeLight, icon: Icons.light_mode_rounded, isSelected: themeMode == ThemeMode.light, onTap: () => ref.read(themeProvider.notifier).setThemeMode(ThemeMode.light), ), ), ], ), ], ), ); } } class _ThemeOption extends StatelessWidget { final String label; final IconData icon; final bool isSelected; final VoidCallback onTap; const _ThemeOption({ required this.label, required this.icon, required this.isSelected, required this.onTap, }); @override Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return GestureDetector( onTap: onTap, child: AnimatedContainer( duration: const Duration(milliseconds: 200), padding: const EdgeInsets.symmetric(vertical: 12), decoration: BoxDecoration( color: isSelected ? AppColors.accent.withOpacity(0.15) : (isDark ? Colors.white.withOpacity(0.05) : Colors.black.withOpacity(0.03)), borderRadius: BorderRadius.circular(12), border: Border.all( color: isSelected ? AppColors.accent : (isDark ? Colors.white.withOpacity(0.1) : Colors.black.withOpacity(0.08)), width: isSelected ? 2 : 1, ), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ Icon( icon, color: isSelected ? AppColors.accent : Theme.of(context).colorScheme.onSurface.withOpacity(0.5), size: 22, ), const SizedBox(height: 6), Text( label, style: TextStyle( fontSize: 11, fontWeight: isSelected ? FontWeight.w600 : FontWeight.normal, color: isSelected ? AppColors.accent : Theme.of(context).colorScheme.onSurface.withOpacity(0.6), ), textAlign: TextAlign.center, ), ], ), ), ); } }