import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../providers/cart_provider.dart'; import '../providers/user_provider.dart'; import 'products_screen.dart'; import 'product_detail_screen.dart'; import 'cart_screen.dart'; import 'login_screen.dart'; import 'orders_screen.dart'; import 'search_screen.dart'; import 'categories_screen.dart'; import '../widgets/product_card.dart'; import '../services/woocommerce_service.dart'; import '../services/analytics_service.dart'; import '../models/product.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override State createState() => _HomeScreenState(); } class _HomeScreenState extends State { final WooCommerceService _wooCommerceService = WooCommerceService(); List _featuredProducts = []; bool _isLoading = true; String? _error; @override void initState() { super.initState(); _loadFeaturedProducts(); } Future _loadFeaturedProducts() async { try { setState(() { _isLoading = true; _error = null; }); final products = await _wooCommerceService.getFeaturedProducts(limit: 6); // Falls keine Featured Products vorhanden sind, lade normale Produkte if (products.isEmpty) { final allProducts = await _wooCommerceService.getProducts(perPage: 6); setState(() { _featuredProducts = allProducts; _isLoading = false; }); } else { setState(() { _featuredProducts = products; _isLoading = false; }); } } catch (e) { setState(() { _error = e.toString(); _isLoading = false; }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('HyggeCraftery'), actions: [ // Such-Button IconButton( icon: const Icon(Icons.search), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const SearchScreen(), ), ); }, ), // Kategorien-Button IconButton( icon: const Icon(Icons.category), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const CategoriesScreen(), ), ); }, ), // Account-Button Consumer( builder: (context, userProvider, child) { return IconButton( icon: Icon( userProvider.isLoggedIn ? Icons.account_circle : Icons.login, ), onPressed: () { if (userProvider.isLoggedIn) { _showAccountMenu(context, userProvider); } else { Navigator.push( context, MaterialPageRoute( builder: (context) => const LoginScreen(), ), ); } }, ); }, ), // Warenkorb-Button Consumer( builder: (context, cart, child) { return Stack( children: [ IconButton( icon: const Icon(Icons.shopping_cart), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const CartScreen(), ), ); }, ), if (cart.itemCount > 0) Positioned( right: 8, top: 8, child: Container( padding: const EdgeInsets.all(4), decoration: const BoxDecoration( color: Colors.red, shape: BoxShape.circle, ), constraints: const BoxConstraints( minWidth: 16, minHeight: 16, ), child: Text( '${cart.itemCount}', style: const TextStyle( color: Colors.white, fontSize: 10, ), textAlign: TextAlign.center, ), ), ), ], ); }, ), ], ), body: _buildHomeTab(), ); } Widget _buildHomeTab() { if (_isLoading) { return const Center(child: CircularProgressIndicator()); } if (_error != null) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.error_outline, size: 64, color: Colors.red), const SizedBox(height: 16), Text( 'Fehler beim Laden der Produkte', style: Theme.of(context).textTheme.titleLarge, ), const SizedBox(height: 8), Text( _error!, style: Theme.of(context).textTheme.bodyMedium, textAlign: TextAlign.center, ), const SizedBox(height: 16), ElevatedButton( onPressed: _loadFeaturedProducts, child: const Text('Erneut versuchen'), ), ], ), ); } return SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Willkommensbereich Container( width: double.infinity, padding: const EdgeInsets.all(24), decoration: BoxDecoration( gradient: LinearGradient( colors: [ const Color(0xFF8B6F47).withOpacity(0.8), const Color(0xFFD4A574).withOpacity(0.8), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.circular(16), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Willkommen bei HyggeCraftery', style: Theme.of(context).textTheme.headlineSmall?.copyWith( color: Colors.white, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 8), Text( 'Entdecke unsere gemütlichen Handwerksprodukte', style: Theme.of(context).textTheme.bodyLarge?.copyWith( color: Colors.white.withOpacity(0.9), ), ), ], ), ), const SizedBox(height: 32), // Quick Actions Row( children: [ Expanded( child: _buildQuickActionCard( context, icon: Icons.search, title: 'Suchen', color: Colors.blue, onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const SearchScreen(), ), ); }, ), ), const SizedBox(width: 12), Expanded( child: _buildQuickActionCard( context, icon: Icons.category, title: 'Kategorien', color: Colors.green, onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const CategoriesScreen(), ), ); }, ), ), ], ), const SizedBox(height: 32), // Featured Products Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Ausgewählte Produkte', style: Theme.of(context).textTheme.headlineSmall?.copyWith( fontWeight: FontWeight.bold, color: const Color(0xFF8B6F47), ), ), TextButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const ProductsScreen(), ), ); }, child: const Text('Alle anzeigen'), ), ], ), const SizedBox(height: 16), if (_featuredProducts.isEmpty) const Center( child: Padding( padding: EdgeInsets.all(32.0), child: Text('Keine Produkte verfügbar'), ), ) else GridView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, crossAxisSpacing: 16, mainAxisSpacing: 16, childAspectRatio: 0.75, ), itemCount: _featuredProducts.length, itemBuilder: (context, index) { return ProductCard( product: _featuredProducts[index], onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => ProductDetailScreen( product: _featuredProducts[index], ), ), ); }, ); }, ), ], ), ); } void _showAccountMenu(BuildContext context, UserProvider userProvider) { showModalBottomSheet( context: context, builder: (context) => Container( padding: const EdgeInsets.all(16), child: Column( mainAxisSize: MainAxisSize.min, children: [ if (userProvider.user != null) ...[ ListTile( leading: const Icon(Icons.person), title: Text(userProvider.user!.fullName), subtitle: Text(userProvider.user!.email), ), const Divider(), ], ListTile( leading: const Icon(Icons.shopping_bag), title: const Text('Meine Bestellungen'), onTap: () { Navigator.pop(context); Navigator.push( context, MaterialPageRoute( builder: (context) => const OrdersScreen(), ), ); }, ), const Divider(), ListTile( leading: const Icon(Icons.logout, color: Colors.red), title: const Text('Abmelden', style: TextStyle(color: Colors.red)), onTap: () async { await userProvider.logout(); Navigator.pop(context); ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('Erfolgreich abgemeldet'), backgroundColor: Colors.green, ), ); }, ), ], ), ), ); } Widget _buildQuickActionCard( BuildContext context, { required IconData icon, required String title, required Color color, required VoidCallback onTap, }) { return Card( child: InkWell( onTap: onTap, borderRadius: BorderRadius.circular(12), child: Padding( padding: const EdgeInsets.all(16), child: Column( children: [ Icon(icon, size: 32, color: color), const SizedBox(height: 8), Text( title, style: Theme.of(context).textTheme.bodyMedium?.copyWith( fontWeight: FontWeight.bold, ), ), ], ), ), ), ); } }