import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'training_detail_screen.dart'; class FavoritesTab extends StatelessWidget { const FavoritesTab({super.key}); @override Widget build(BuildContext context) { final user = FirebaseAuth.instance.currentUser; if (user == null) { return const Center(child: Text('Nicht eingeloggt')); } return Scaffold( appBar: AppBar( title: const Text('Favoriten'), ), body: StreamBuilder( stream: FirebaseFirestore.instance.collection('User').doc(user.uid).snapshots(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } if (!snapshot.hasData || !snapshot.data!.exists) { return const Center(child: Text('Keine Favoriten gefunden')); } final data = snapshot.data!.data() as Map; final favorites = List.from(data['favorites'] ?? []); if (favorites.isEmpty) { return const Center(child: Text('Keine Favoriten gefunden')); } return GridView.builder( padding: const EdgeInsets.all(8), gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 300, childAspectRatio: 0.75, crossAxisSpacing: 10, mainAxisSpacing: 10, ), itemCount: favorites.length, itemBuilder: (context, index) { return FutureBuilder( future: FirebaseFirestore.instance.collection('Training').doc(favorites[index]).get(), builder: (context, trainingSnapshot) { if (!trainingSnapshot.hasData || !trainingSnapshot.data!.exists) { return const SizedBox.shrink(); } final trainingData = trainingSnapshot.data!.data() as Map; return Card( child: Stack( children: [ InkWell( onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => TrainingDetailScreen(trainingId: favorites[index]), ), ); }, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( child: Container( color: Colors.grey[200], child: const Center( child: Icon(Icons.fitness_center, size: 50), ), ), ), Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( trainingData['title'] ?? 'Unbekannt', style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 16, ), maxLines: 2, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 4), Row( children: [ const Icon(Icons.star, color: Colors.amber, size: 16), const SizedBox(width: 4), Text( (trainingData['rating overall'] ?? 0.0).toStringAsFixed(1), style: const TextStyle(fontSize: 12), ), ], ), const SizedBox(height: 4), Text( 'Dauer: ${trainingData['duration'] ?? '-'} Minuten', style: const TextStyle(fontSize: 12, color: Colors.grey), ), ], ), ), ], ), ), Positioned( top: 4, right: 4, child: IconButton( icon: const Icon(Icons.favorite, color: Colors.red), onPressed: () async { await FirebaseFirestore.instance.collection('User').doc(user.uid).update({ 'favorites': FieldValue.arrayRemove([favorites[index]]), }); }, ), ), ], ), ); }, ); }, ); }, ), ); } }