53 lines
1.9 KiB
Dart
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,
|
|
);
|
|
});
|