Übungen können zu Training hinzugefügt werden
parent
ae6e2bd0ed
commit
e5c3cd9206
|
|
@ -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)),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue