Files
customer-im-client-dev/apps/im_app/lib/features/login/di/auth_providers.dart
Cody 0ee2c8c63c 优化配置,修复 demo bug
1,network 框架完善
2,websocket 机制完善
3,设计文档整理到架构文档
4,脚本,配置完善
2026-03-07 19:29:18 +08:00

65 lines
2.9 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../app/di/network_provider.dart';
import '../../../app/di/db_provider.dart';
import '../../../data/repositories/auth_repository_impl.dart';
import '../../../domain/repositories/auth_repository.dart';
import '../usecases/login_usecase.dart';
/// ## DI 装配Auth Feature 层
///
/// di/ 目录只放**需要手动装配的 Provider**(构造注入、回调组合等)。
/// ViewModel Provider 由 `@riverpod` 注解自动生成,不在此文件中。
///
/// Auth 模块的 DI 链路Repository → UseCase按需
/// app/di/ 只提供 SDK 基础设施apiConfig / networkSdkApi / socketManager / storageApi
/// 业务模块的 Provider 内聚在 features/{模块}/di/ 下。
///
/// ```
/// LoginViewModel ← @riverpod 自动生成
/// → ref.read(loginUseCaseProvider) ← di/ 手动装配
/// → ref.read(authRepositoryProvider) ← di/ 手动装配
/// → ref.read(socketManagerProvider) ← app/di/ 手动装配
/// → ref.read(apiConfigProvider) ← app/di/ 手动装配
/// → ref.read(networkSdkApiProvider) ← app/di/ 手动装配
/// → ref.read(storageSdkProvider) ← app/di/ 手动装配
/// ```
// ── Repository ────────────────────────────────────────────────────────────────
/// 认证 Repository Provider
///
/// 注入 domain 接口类型 [AuthRepository]
/// ViewModel 通过此 Provider 获取依赖,不感知具体实现。
///
/// [onTokenUpdate] 是复合回调:
/// 1. 写入 ApiConfig 内存 → 后续请求自动携带 token
/// 2. TODO: 持久化到安全存储crypto_sdk→ App 重启后恢复
/// 两个 SDK 互不依赖,由 App 层在此组合。
final authRepositoryProvider = Provider<AuthRepository>((ref) {
final apiConfig = ref.read(apiConfigProvider);
// TODO: final secureStorage = ref.read(secureStorageProvider);
return AuthRepositoryImpl(
client: ref.read(networkSdkApiProvider), // 注入 Facade 接口
onTokenUpdate: (token) {
apiConfig.updateToken(token); // 内存network_sdk
// TODO: secureStorage.saveToken(token); // 持久化crypto_sdk
},
);
});
// ── UseCase ───────────────────────────────────────────────────────────────────
/// 登录用例 Provider
///
/// 多步编排:格式校验 → 调接口 → 写 Token → 连接 WebSocket → 打开数据库
final loginUseCaseProvider = Provider<LoginUseCase>((ref) {
return LoginUseCase(
authRepository: ref.read(authRepositoryProvider),
socketManager: ref.read(socketManagerProvider),
apiConfig: ref.read(apiConfigProvider),
storageApi: ref.read(storageSdkProvider),
);
});