import 'package:flutter/services.dart' show rootBundle; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '/features/page/business_logic/notifiers/page_repository_notifier.dart'; import '/features/page/data/repositories/page_repository_impl.dart'; import '/features/page/domain/repositories/page_repository.dart'; import '/features/stock/business_logic/notifiers/stock_in_manual_notifier.dart'; import '/features/stock/business_logic/notifiers/stock_out_empty_notifier.dart'; import '../../app/enum/config_path_enum.dart'; import '../api/clients/wms_api_client.dart'; import '../api/clients/impl/wms_v1_api_client.dart'; import '../api/config/api_config.dart'; import '../../features/stock/data/repositories/stock_repository_impl.dart'; import '../../features/stock/domain/repositories/stock_repository.dart'; import '../../features/stock/business_logic/notifiers/stock_in_empty_notifier.dart'; final _defaultApiConfig = ApiConfig.fromYaml(''' wms: require_stock_out: "/wms/task/requireStockOut" require_stock_in: "/wms/task/requireStockIn" test: "/test/test" baseUrl: "http://10.0.2.2:12315" '''); final apiConfigProvider = FutureProvider((ref) async { final configString = await rootBundle.loadString( ConfigPathEnum.endPoints.configPath, ); return ApiConfig.fromYaml(configString); }); final wmsApiClientProvider = Provider((ref) { final configAsync = ref.watch(apiConfigProvider); return configAsync.when( data: (config) => WmsV1ApiClient(apiConfig: config), loading: () => WmsV1ApiClient(apiConfig: _defaultApiConfig), error: (err, stack) => WmsV1ApiClient(apiConfig: _defaultApiConfig), ); }); final stockRepositoryProvider = Provider((ref) { final apiClient = ref.watch(wmsApiClientProvider); return StockRepositoryImpl(wmsApiClient: apiClient); }); final pageRepositoryProvider = Provider((ref) { final apiClient = ref.watch(wmsApiClientProvider); return PageRepositoryImpl(wmsApiClient: apiClient); }); final stockInEmptyNotifierProvider = StateNotifierProvider.autoDispose>(( ref, ) { final repository = ref.watch(stockRepositoryProvider); return StockInEmptyNotifier(repository); }); final stockInNotifierProvider = StateNotifierProvider.autoDispose>(( ref, ) { final repository = ref.watch(stockRepositoryProvider); return StockInManualNotifier(repository); }); final pageNotifierProvider = StateNotifierProvider.autoDispose>( (ref) { final repository = ref.watch(pageRepositoryProvider); return PageRepositoryNotifier(repository); }, ); final stockOutEmptyNotifierProvider = StateNotifierProvider.autoDispose>(( ref, ) { final repository = ref.watch(stockRepositoryProvider); return StockOutEmptyNotifier(repository); });