pda_template/lib/core/di/providers.dart
liyuqi da66e8e96a 1. 架构设计:
* 业务逻辑与UI解耦合
* 生产者消费者模式
* 仓库模式
* 观察者模式
2. 页面开发:
* 空载具入库
* 手动码盘入库
* 呼叫空托
2025-04-14 23:28:20 +08:00

82 lines
3.0 KiB
Dart

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<ApiConfig>((ref) async {
final configString = await rootBundle.loadString(
ConfigPathEnum.endPoints.configPath,
);
return ApiConfig.fromYaml(configString);
});
final wmsApiClientProvider = Provider<WmsApiClient>((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<StockRepository>((ref) {
final apiClient = ref.watch(wmsApiClientProvider);
return StockRepositoryImpl(wmsApiClient: apiClient);
});
final pageRepositoryProvider = Provider<PageRepository>((ref) {
final apiClient = ref.watch(wmsApiClientProvider);
return PageRepositoryImpl(wmsApiClient: apiClient);
});
final stockInEmptyNotifierProvider =
StateNotifierProvider.autoDispose<StockInEmptyNotifier, AsyncValue<void>>((
ref,
) {
final repository = ref.watch(stockRepositoryProvider);
return StockInEmptyNotifier(repository);
});
final stockInNotifierProvider =
StateNotifierProvider.autoDispose<StockInManualNotifier, AsyncValue<void>>((
ref,
) {
final repository = ref.watch(stockRepositoryProvider);
return StockInManualNotifier(repository);
});
final pageNotifierProvider =
StateNotifierProvider.autoDispose<PageRepositoryNotifier, AsyncValue<void>>(
(ref) {
final repository = ref.watch(pageRepositoryProvider);
return PageRepositoryNotifier(repository);
},
);
final stockOutEmptyNotifierProvider =
StateNotifierProvider.autoDispose<StockOutEmptyNotifier, AsyncValue<void>>((
ref,
) {
final repository = ref.watch(stockRepositoryProvider);
return StockOutEmptyNotifier(repository);
});