54 lines
1.3 KiB
Dart
54 lines
1.3 KiB
Dart
import 'package:hive_ce/hive.dart';
|
|
import '../models/cart_item_model.dart';
|
|
|
|
/// Cart local data source using Hive
|
|
abstract class CartLocalDataSource {
|
|
Future<List<CartItemModel>> getCartItems();
|
|
Future<void> addToCart(CartItemModel item);
|
|
Future<void> updateQuantity(String productId, int quantity);
|
|
Future<void> removeFromCart(String productId);
|
|
Future<void> clearCart();
|
|
}
|
|
|
|
class CartLocalDataSourceImpl implements CartLocalDataSource {
|
|
final Box<CartItemModel> box;
|
|
|
|
CartLocalDataSourceImpl(this.box);
|
|
|
|
@override
|
|
Future<List<CartItemModel>> getCartItems() async {
|
|
return box.values.toList();
|
|
}
|
|
|
|
@override
|
|
Future<void> addToCart(CartItemModel item) async {
|
|
await box.put(item.productId, item);
|
|
}
|
|
|
|
@override
|
|
Future<void> updateQuantity(String productId, int quantity) async {
|
|
final item = box.get(productId);
|
|
if (item != null) {
|
|
final updated = CartItemModel(
|
|
productId: item.productId,
|
|
productName: item.productName,
|
|
price: item.price,
|
|
quantity: quantity,
|
|
imageUrl: item.imageUrl,
|
|
addedAt: item.addedAt,
|
|
);
|
|
await box.put(productId, updated);
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<void> removeFromCart(String productId) async {
|
|
await box.delete(productId);
|
|
}
|
|
|
|
@override
|
|
Future<void> clearCart() async {
|
|
await box.clear();
|
|
}
|
|
}
|