import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:im_app/app/di/network_provider.dart'; import 'package:im_app/app/di/db_provider.dart'; import 'package:im_app/core/services/socket_manager.dart'; import 'package:im_app/features/login/di/auth_providers.dart'; import 'package:im_app/features/app_tab/di/favorite_provider.dart'; import 'package:im_app/data/repositories/call_log_repository_impl.dart'; import 'package:im_app/domain/repositories/call_log_repository.dart'; import 'package:im_app/features/settings/usecases/set_theme_usecase.dart'; import 'package:im_app/features/settings/usecases/fetch_profile_usecase.dart'; import 'package:im_app/features/settings/usecases/fetch_call_logs_usecase.dart'; import 'package:im_app/features/settings/usecases/logout_usecase.dart'; import 'package:im_app/features/settings/usecases/update_profile_usecase.dart'; import 'package:im_app/features/settings/usecases/fetch_favorites_use_case.dart'; import 'package:im_app/features/settings/usecases/delete_favorite_use_case.dart'; import 'package:im_app/features/settings/presentation/favorites_view_model.dart'; /// Settings feature DI 装配 /// /// ``` /// SettingsViewModel /// → fetchProfileUseCaseProvider → GET /app/api/user/profile /// → logoutUseCaseProvider → POST /app/api/auth/logout + WS + DB /// /// EditProfileViewModel /// → updateProfileUseCaseProvider → POST /app/api/user/update-profile /// /// ThemeViewModel /// → setThemeUseCaseProvider → ThemeModeNotifier(内存 + 持久化 TODO) /// ``` // ── Theme ───────────────────────────────────────────────────────────────────── /// 设置主题用例 Provider final setThemeUseCaseProvider = Provider( (_) => const SetThemeUseCase(), ); // ── Profile ──────────────────────────────────────────────────────────────────── /// 获取当前用户资料用例 Provider final fetchProfileUseCaseProvider = Provider((ref) { return FetchProfileUseCase(client: ref.read(networkSdkApiProvider)); }); /// 更新用户资料用例 Provider final updateProfileUseCaseProvider = Provider((ref) { return UpdateProfileUseCase(client: ref.read(networkSdkApiProvider)); }); // ── Favorites ───────────────────────────────────────────────────────────────── final fetchFavoritesUseCaseProvider = Provider((ref) { return FetchFavoritesUseCase( client: ref.read(networkSdkApiProvider), repository: ref.read(favoriteRepositoryProvider), ); }); final deleteFavoriteUseCaseProvider = Provider((ref) { return DeleteFavoriteUseCase( client: ref.read(networkSdkApiProvider), repository: ref.read(favoriteRepositoryProvider), ); }); final favoritesViewModelProvider = NotifierProvider( FavoritesViewModel.new, ); // ── Call Logs ───────────────────────────────────────────────────────────────── /// 通话记录仓储 Provider(Settings feature 内部使用) final callLogRepositoryProvider = Provider((ref) { return CallLogRepositoryImpl(ref.read(storageSdkProvider)); }); /// 拉取通话记录用例 Provider final fetchCallLogsUseCaseProvider = Provider((ref) { return FetchCallLogsUseCase( client: ref.read(networkSdkApiProvider), repo: ref.read(callLogRepositoryProvider), ); }); // ── Auth ─────────────────────────────────────────────────────────────────────── /// 退出登录用例 Provider final logoutUseCaseProvider = Provider((ref) { return LogoutUseCase( authRepository: ref.read(authRepositoryProvider), socketManager: ref.read(socketManagerProvider), storageApi: ref.read(storageSdkProvider), ); });