Files
worker/lib/features/cart/presentation/providers/cart_data_providers.dart
Phuoc Nguyen 0708ed7d6f update info
2025-11-20 10:12:24 +07:00

51 lines
1.8 KiB
Dart

/// Cart Data Providers
///
/// State management for cart data layer using Riverpod.
/// Provides access to datasources and repositories.
library;
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:worker/core/database/hive_service.dart';
import 'package:worker/core/network/dio_client.dart';
import 'package:worker/features/cart/data/datasources/cart_local_datasource.dart';
import 'package:worker/features/cart/data/datasources/cart_remote_datasource.dart';
import 'package:worker/features/cart/data/repositories/cart_repository_impl.dart';
import 'package:worker/features/cart/domain/repositories/cart_repository.dart';
part 'cart_data_providers.g.dart';
/// Cart Local DataSource Provider
///
/// Provides instance of CartLocalDataSource.
/// keepAlive: true to persist with cart provider.
@Riverpod(keepAlive: true)
CartLocalDataSource cartLocalDataSource(Ref ref) {
final hiveService = HiveService();
return CartLocalDataSourceImpl(hiveService);
}
/// Cart Remote DataSource Provider
///
/// Provides instance of CartRemoteDataSource with DioClient.
/// keepAlive: true to persist with cart provider.
@Riverpod(keepAlive: true)
Future<CartRemoteDataSource> cartRemoteDataSource(Ref ref) async {
final dioClient = await ref.watch(dioClientProvider.future);
return CartRemoteDataSourceImpl(dioClient);
}
/// Cart Repository Provider
///
/// Provides instance of CartRepository implementation.
/// keepAlive: true to persist with cart provider.
@Riverpod(keepAlive: true)
Future<CartRepository> cartRepository(Ref ref) async {
final remoteDataSource = await ref.watch(cartRemoteDataSourceProvider.future);
final localDataSource = ref.watch(cartLocalDataSourceProvider);
return CartRepositoryImpl(
remoteDataSource: remoteDataSource,
localDataSource: localDataSource,
);
}