import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:kettlebell_tracker/providers/settings_provider.dart'; import 'package:kettlebell_tracker/theme/app_theme.dart'; import 'package:kettlebell_tracker/widgets/custom_card.dart'; import 'package:kettlebell_tracker/widgets/custom_text_field.dart'; class SettingsScreen extends ConsumerStatefulWidget { const SettingsScreen({super.key}); @override ConsumerState createState() => _SettingsScreenState(); } class _SettingsScreenState extends ConsumerState { final _formKey = GlobalKey(); late TextEditingController _trainingTimeController; late TextEditingController _weightLeftController; late TextEditingController _weightRightController; late TextEditingController _goalSetsController; @override void initState() { super.initState(); final settings = ref.read(settingsProvider); _trainingTimeController = TextEditingController( text: settings.trainingTimeMinutes.toString(), ); _weightLeftController = TextEditingController( text: settings.weightLeft.toString(), ); _weightRightController = TextEditingController( text: settings.weightRight.toString(), ); _goalSetsController = TextEditingController( text: settings.goalSets.toString(), ); } @override void dispose() { _trainingTimeController.dispose(); _weightLeftController.dispose(); _weightRightController.dispose(); _goalSetsController.dispose(); super.dispose(); } void _saveSettings() { if (_formKey.currentState!.validate()) { final newSettings = SettingsState( trainingTimeMinutes: int.parse(_trainingTimeController.text), weightLeft: double.parse(_weightLeftController.text), weightRight: double.parse(_weightRightController.text), goalSets: int.parse(_goalSetsController.text), ); ref.read(settingsProvider.notifier).updateSettings(newSettings); ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('Einstellungen gespeichert!'), backgroundColor: AppTheme.oneDarkGreen, ), ); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('Bitte korrigiere die Fehler.'), backgroundColor: AppTheme.oneDarkRed, ), ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Einstellungen')), body: SingleChildScrollView( padding: const EdgeInsets.all(16.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ CustomCard( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "Trainingsparameter", style: Theme.of(context).textTheme.titleLarge, ), const SizedBox(height: 20), CustomTextField( controller: _trainingTimeController, labelText: "Trainingszeit (Minuten)", icon: Icons.timer, keyboardType: TextInputType.number, ), const SizedBox(height: 16), CustomTextField( controller: _weightLeftController, labelText: "Linke Kettlebell (kg)", icon: Icons.fitness_center, keyboardType: TextInputType.number, ), const SizedBox(height: 16), CustomTextField( controller: _weightRightController, labelText: "Rechte Kettlebell (kg)", icon: Icons.fitness_center, keyboardType: TextInputType.number, ), const SizedBox(height: 16), const SizedBox(height: 16), CustomTextField( controller: _goalSetsController, labelText: "Ziel-Sätze", icon: Icons.flag, keyboardType: TextInputType.number, ), ], ), ), const SizedBox(height: 24), ElevatedButton.icon( onPressed: _saveSettings, icon: const Icon(Icons.save), label: const Text('Einstellungen speichern'), style: ElevatedButton.styleFrom( backgroundColor: AppTheme.oneDarkPrimary, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16), ), ), ], ), ), ), ); } }