Übungen können zu Training hinzugefügt werden

main
joschy2002 2025-05-30 22:21:32 +02:00
parent ae6e2bd0ed
commit e5c3cd9206
1 changed files with 164 additions and 20 deletions

View File

@ -281,26 +281,63 @@ class _CalendarTabState extends State<CalendarTab> {
if (!userDoc.exists) return;
final data = userDoc.data() as Map<String, dynamic>;
final trainingExercises = Map<String, dynamic>.from(data['trainingExercises'] ?? {});
final exercises = List<Map<String, dynamic>>.from(trainingExercises[event['date']] ?? []);
final trainings = Map<String, dynamic>.from(data['trainings'] ?? {});
final dateString = event['date'] as String;
final trainingId = event['id'] as String;
exercises.add({
'id': result['id'],
'name': result['title'],
'description': result['description'],
'duration': result['duration'],
});
print('Füge Übung hinzu:');
print('dateString: $dateString');
print('trainingId: $trainingId');
print('Vorher - trainings: $trainings');
trainingExercises[event['date']] = exercises;
// Finde das Training und füge die Übung hinzu
if (trainings.containsKey(dateString)) {
final trainingsList = List<Map<String, dynamic>>.from(trainings[dateString]);
final trainingIndex = trainingsList.indexWhere((t) => t['id'] == trainingId);
if (trainingIndex != -1) {
final exercises = List<Map<String, dynamic>>.from(trainingsList[trainingIndex]['exercises'] ?? []);
exercises.add({
'id': result['id'],
'name': result['title'],
'description': result['description'],
'duration': result['duration'],
});
trainingsList[trainingIndex]['exercises'] = exercises;
trainings[dateString] = trainingsList;
}
}
print('Nachher - trainings: $trainings');
// Aktualisiere die Datenbank
await FirebaseFirestore.instance
.collection('User')
.doc(_currentUserId)
.update({
'trainingExercises': trainingExercises,
'trainings': trainings,
});
await _loadEvents();
// Aktualisiere die UI sofort
setState(() {
final normalizedDate = DateTime.parse(dateString);
if (_events.containsKey(normalizedDate)) {
final eventIndex = _events[normalizedDate]!.indexWhere((e) => e['id'] == trainingId);
if (eventIndex != -1) {
final exercises = List<Map<String, dynamic>>.from(_events[normalizedDate]![eventIndex]['exercises'] ?? []);
exercises.add({
'id': result['id'],
'name': result['title'],
'description': result['description'],
'duration': result['duration'],
});
_events[normalizedDate]![eventIndex]['exercises'] = exercises;
_events[normalizedDate]![eventIndex]['remainingTime'] =
(_events[normalizedDate]![eventIndex]['duration'] as int) -
exercises.fold<int>(0, (sum, exercise) => sum + (exercise['duration'] as int));
}
}
});
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
@ -447,22 +484,53 @@ class _CalendarTabState extends State<CalendarTab> {
if (!userDoc.exists) return;
final data = userDoc.data() as Map<String, dynamic>;
final trainingExercises = Map<String, dynamic>.from(data['trainingExercises'] ?? {});
final exercises = List<Map<String, dynamic>>.from(trainingExercises[event['date']] ?? []);
final trainings = Map<String, dynamic>.from(data['trainings'] ?? {});
final dateString = event['date'] as String;
final trainingId = event['id'] as String;
// Entferne die Übung aus der Liste
exercises.removeWhere((e) => e['id'] == exercise['id']);
print('Entferne Übung:');
print('dateString: $dateString');
print('trainingId: $trainingId');
print('Vorher - trainings: $trainings');
trainingExercises[event['date']] = exercises;
// Finde das Training und entferne die Übung
if (trainings.containsKey(dateString)) {
final trainingsList = List<Map<String, dynamic>>.from(trainings[dateString]);
final trainingIndex = trainingsList.indexWhere((t) => t['id'] == trainingId);
if (trainingIndex != -1) {
final exercises = List<Map<String, dynamic>>.from(trainingsList[trainingIndex]['exercises'] ?? []);
exercises.removeWhere((e) => e['id'] == exercise['id']);
trainingsList[trainingIndex]['exercises'] = exercises;
trainings[dateString] = trainingsList;
}
}
print('Nachher - trainings: $trainings');
// Aktualisiere die Datenbank
await FirebaseFirestore.instance
.collection('User')
.doc(_currentUserId)
.update({
'trainingExercises': trainingExercises,
'trainings': trainings,
});
await _loadEvents();
// Aktualisiere die UI sofort
setState(() {
final normalizedDate = DateTime.parse(dateString);
if (_events.containsKey(normalizedDate)) {
final eventIndex = _events[normalizedDate]!.indexWhere((e) => e['id'] == trainingId);
if (eventIndex != -1) {
final exercises = List<Map<String, dynamic>>.from(_events[normalizedDate]![eventIndex]['exercises'] ?? []);
exercises.removeWhere((e) => e['id'] == exercise['id']);
_events[normalizedDate]![eventIndex]['exercises'] = exercises;
_events[normalizedDate]![eventIndex]['remainingTime'] =
(_events[normalizedDate]![eventIndex]['duration'] as int) -
exercises.fold<int>(0, (sum, exercise) => sum + (exercise['duration'] as int));
}
}
});
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
@ -711,8 +779,58 @@ class _CalendarTabState extends State<CalendarTab> {
if (exercise is Map<String, dynamic>) {
return Padding(
padding: const EdgeInsets.only(bottom: 4),
child: Text(
'${exercise['name']} - ${exercise['duration']} Minuten',
child: Row(
children: [
const Icon(Icons.fitness_center, size: 16),
const SizedBox(width: 8),
Expanded(
child: InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TrainingDetailScreen(
trainingId: exercise['id'],
),
),
);
},
child: Text(
'${exercise['name']} - ${exercise['duration']} Minuten',
style: const TextStyle(
decoration: TextDecoration.underline,
color: Colors.blue,
),
),
),
),
if (isCurrentUser)
IconButton(
icon: const Icon(Icons.delete, color: Colors.red, size: 20),
onPressed: () {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text('Übung entfernen'),
content: Text('Möchten Sie die Übung "${exercise['name']}" wirklich entfernen?'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text('Abbrechen'),
),
TextButton(
onPressed: () {
Navigator.pop(context);
_removeExercise(event, exercise);
},
child: const Text('Entfernen', style: TextStyle(color: Colors.red)),
),
],
),
);
},
),
],
),
);
}
@ -798,6 +916,32 @@ class _CalendarTabState extends State<CalendarTab> {
),
),
),
if (isCurrentUser)
IconButton(
icon: const Icon(Icons.delete, color: Colors.red, size: 20),
onPressed: () {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text('Übung entfernen'),
content: Text('Möchten Sie die Übung "${exercise['name']}" wirklich entfernen?'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text('Abbrechen'),
),
TextButton(
onPressed: () {
Navigator.pop(context);
_removeExercise(event, exercise);
},
child: const Text('Entfernen', style: TextStyle(color: Colors.red)),
),
],
),
);
},
),
],
),
);