import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'dart:convert'; import '../models/product.dart'; class CartItem { final Product product; int quantity; CartItem({ required this.product, this.quantity = 1, }); double get totalPrice => product.priceValue * quantity; Map toJson() { return { 'product_id': product.id, 'quantity': quantity, 'product': product.toJson(), }; } factory CartItem.fromJson(Map json) { return CartItem( product: Product.fromJson(json['product']), quantity: json['quantity'] ?? 1, ); } } class CartProvider extends ChangeNotifier { final List _items = []; static const String _cartKey = 'cart_items'; List get items => _items; int get itemCount => _items.fold(0, (sum, item) => sum + item.quantity); double get totalPrice { return _items.fold(0.0, (sum, item) => sum + item.totalPrice); } CartProvider() { _loadCart(); } /// Lädt gespeicherten Warenkorb Future _loadCart() async { try { final prefs = await SharedPreferences.getInstance(); final cartJson = prefs.getString(_cartKey); if (cartJson != null) { final List cartData = json.decode(cartJson); _items.clear(); _items.addAll( cartData.map((item) => CartItem.fromJson(item)).toList(), ); notifyListeners(); } } catch (e) { print('Fehler beim Laden des Warenkorbs: $e'); } } /// Speichert Warenkorb Future _saveCart() async { try { final prefs = await SharedPreferences.getInstance(); final cartJson = json.encode( _items.map((item) => item.toJson()).toList(), ); await prefs.setString(_cartKey, cartJson); } catch (e) { print('Fehler beim Speichern des Warenkorbs: $e'); } } void addItem(Product product) { final existingIndex = _items.indexWhere((item) => item.product.id == product.id); if (existingIndex >= 0) { _items[existingIndex].quantity++; } else { _items.add(CartItem(product: product)); } notifyListeners(); _saveCart(); } void removeItem(Product product) { final existingIndex = _items.indexWhere((item) => item.product.id == product.id); if (existingIndex >= 0) { if (_items[existingIndex].quantity > 1) { _items[existingIndex].quantity--; } else { _items.removeAt(existingIndex); } notifyListeners(); _saveCart(); } } void removeItemCompletely(Product product) { _items.removeWhere((item) => item.product.id == product.id); notifyListeners(); _saveCart(); } void clearCart() { _items.clear(); notifyListeners(); _saveCart(); } }