import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:niogu_ecommerce_v1/core/models/tenant_model.dart'; import 'package:niogu_ecommerce_v1/core/providers/app_provider.dart'; import 'package:niogu_ecommerce_v1/features/home/data/datasource/home_remote_datasource_impl.dart'; import 'package:niogu_ecommerce_v1/features/home/data/repositories/home_repository_impl.dart'; import 'package:niogu_ecommerce_v1/features/home/domain/entities/home.dart'; import 'package:niogu_ecommerce_v1/features/home/domain/repositories/i_home_repository.dart'; import 'package:niogu_ecommerce_v1/features/home/presentation/controllers/home_controller.dart'; final homeRemoteDataSourceProvider = Provider.autoDispose((ref) { final dio = ref.watch(dioProvider); return HomeRemoteDatasourceImpl(dio); }); final homeRepositoryProvider = Provider.autoDispose((ref) { final homeRemoteDataSource = ref.watch(homeRemoteDataSourceProvider); return HomeRepositoryImpl(homeRemoteDataSource); }); final configurationControllerProvider = AsyncNotifierProvider.autoDispose( ConfigurationController.new, ); final homeControllerProvider = AsyncNotifierProvider.autoDispose( HomeController.new, ); final productSearchProvider = StateProvider.autoDispose((ref) => ''); final productByNameControllerProvider = AsyncNotifierProvider.family .autoDispose, String>( ProductByNameController.new, ); final productByNameProvider = Provider.autoDispose>>((ref) { final productSearch = ref.watch(productSearchProvider); if (productSearch.isEmpty) { return AsyncValue.data([]); } return ref.watch(productByNameControllerProvider(productSearch)); }); final processSearchStateProvider = StateProvider.autoDispose( (ref) => null, ); final processSearchProvider = Provider.autoDispose((ref) { final productSearchAsync = ref.watch(productSearchProvider); if (productSearchAsync.isEmpty) { return ProcessSearch.initial; } final processSearchState = ref.watch(processSearchStateProvider); if (processSearchState != null) { return processSearchState; } return ProcessSearch.suggestion; }); final productCategoriesControllerProvider = AsyncNotifierProvider.family .autoDispose, String>( ProductCategoryController.new, );