wordpress/lib/providers/api_controller.dart
2025-10-16 11:27:27 +05:30

53 lines
1.9 KiB
Dart

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:wordpress/providers/api_const.dart';
import 'package:wordpress/providers/api_repositoryprovider.dart';
import 'package:wordpress/viewmodel/all_product_model.dart';
import 'package:wordpress/viewmodel/cart_model.dart';
import 'package:wordpress/viewmodel/detail_model.dart';
import 'package:wordpress/viewmodel/product_home_page_model.dart';
final apiRepositoryProvider = Provider((ref) => ApiRepository());
final productHomePageProvider =
FutureProvider.autoDispose<ProductHomePageModel>((ref) async {
final repo = ref.read(apiRepositoryProvider);
return repo.fetchHomePage(ConstsApi.home);
});
final allProductProvider = FutureProvider.autoDispose<List<AllProductModel>>((
ref,
) async {
final repo = ref.read(apiRepositoryProvider);
return repo.fetchAllProducts(ConstsApi.allproduct);
});
final cartProvider = FutureProvider.autoDispose<CartResponse>((ref) async {
final repo = ref.read(apiRepositoryProvider);
return repo.fetchCart(ConstsApi.cart);
});
final productDetailProvider = FutureProvider.autoDispose
.family<DetailModel, int>((ref, id) async {
final repo = ref.read(apiRepositoryProvider);
return repo.fetchProductDetail(id);
});
final cartHelperProvider = Provider((ref) => WooCartHelper());
final cartIdProvider = StateProvider<int?>((ref) => null);
final cartItemsProvider = FutureProvider<List<CartItem>>((ref) async {
final cartId = ref.watch(cartIdProvider);
if (cartId == null) return [];
final cartHelper = ref.read(cartHelperProvider);
return await cartHelper.getCartItems();
});
final cartItemCountProvider = Provider<int>((ref) {
final cartItems = ref.watch(cartItemsProvider);
return cartItems.when(
data: (items) => items.fold(0, (sum, item) => sum + item.quantity),
loading: () => 0,
error: (_, __) => 0,
);
});