import 'dart:async'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:niogu_ecommerce_v1/features/cart/domain/entities/cart.dart'; import 'package:niogu_ecommerce_v1/features/cart/presentation/providers/cart_provider.dart'; import 'package:niogu_ecommerce_v1/features/home/domain/entities/home.dart'; class CartItemsController extends StateNotifier> { CartItemsController() : super({}); void hydrate(List cartItems) { state = { ...state, for (final cartItem in cartItems) "${cartItem.outletId}-${cartItem.id}": cartItem, }; } void increment(CartItem item, {int? quantity}) { final key = "${item.outletId}-${item.id}"; final cartItem = state[key]; if (cartItem == null) { state = {...state, key: item}; } else { state = { ...state, key: item.copyWith(quantity: cartItem.quantity + (quantity ?? 1)), }; } } void decrement(String outletId, String id) { final key = "$outletId-$id"; final cartItem = state[key]; if (cartItem == null) return; if (cartItem.quantity <= 1) { state = {...state}..remove(key); } else { state = { ...state, key: cartItem.copyWith(quantity: cartItem.quantity - 1), }; } } void clear() { state = {}; } } class ProductBestSellerController extends AutoDisposeAsyncNotifier> { @override FutureOr> build() => _fetchProductBestSellers(); Future> _fetchProductBestSellers() async { final cartRepository = ref.read(cartRepositoryProvider); return await cartRepository.fetchProductBestSellers(); } Future refresh() async { ref.invalidateSelf(); await future; } }