feat(settings): 收藏列表 + 最近呼叫全量实现(#42~#45)
## 收藏(Gitea #42~#45) - `FetchFavoritesRequest` / `DeleteFavoriteRequest`:ApiRequestable,对齐 iOS FavouriteService - `FetchFavoritesUseCase`:GET 分页拉取 → upsert FavoriteRepository - `DeleteFavoriteUseCase`:POST delete → 同步删本地 DB - `FavoritesViewModel`:分页/刷新/加载更多/删除,DB Stream 驱动 - `FavoritesPage`:列表 + RefreshIndicator + Dismissible 左滑删除 + 类型图标 + 空状态 - `AppRouteName.settingsFavorites` + 路由注册 + auth guard - `settings_page.dart` 收藏行 onTap 接入导航 ## 最近呼叫(框架,API 对接待续) - `CallLogRequest` / `FetchCallLogsUseCase` / `RecentCallsViewModel` - `RecentCallsPage`:双 Tab(全部/未接)+ _CallLogTile(图标/时长/时间) - `AppRouteName.settingsRecentCalls` + 路由注册 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,10 +4,17 @@ 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 装配
|
||||
///
|
||||
@@ -42,6 +49,42 @@ final updateProfileUseCaseProvider = Provider<UpdateProfileUseCase>((ref) {
|
||||
return UpdateProfileUseCase(client: ref.read(networkSdkApiProvider));
|
||||
});
|
||||
|
||||
// ── Favorites ─────────────────────────────────────────────────────────────────
|
||||
|
||||
final fetchFavoritesUseCaseProvider = Provider<FetchFavoritesUseCase>((ref) {
|
||||
return FetchFavoritesUseCase(
|
||||
client: ref.read(networkSdkApiProvider),
|
||||
repository: ref.read(favoriteRepositoryProvider),
|
||||
);
|
||||
});
|
||||
|
||||
final deleteFavoriteUseCaseProvider = Provider<DeleteFavoriteUseCase>((ref) {
|
||||
return DeleteFavoriteUseCase(
|
||||
client: ref.read(networkSdkApiProvider),
|
||||
repository: ref.read(favoriteRepositoryProvider),
|
||||
);
|
||||
});
|
||||
|
||||
final favoritesViewModelProvider =
|
||||
NotifierProvider<FavoritesViewModel, FavoritesState>(
|
||||
FavoritesViewModel.new,
|
||||
);
|
||||
|
||||
// ── Call Logs ─────────────────────────────────────────────────────────────────
|
||||
|
||||
/// 通话记录仓储 Provider(Settings feature 内部使用)
|
||||
final callLogRepositoryProvider = Provider<CallLogRepository>((ref) {
|
||||
return CallLogRepositoryImpl(ref.read(storageSdkProvider));
|
||||
});
|
||||
|
||||
/// 拉取通话记录用例 Provider
|
||||
final fetchCallLogsUseCaseProvider = Provider<FetchCallLogsUseCase>((ref) {
|
||||
return FetchCallLogsUseCase(
|
||||
client: ref.read(networkSdkApiProvider),
|
||||
repo: ref.read(callLogRepositoryProvider),
|
||||
);
|
||||
});
|
||||
|
||||
// ── Auth ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// 退出登录用例 Provider
|
||||
|
||||
Reference in New Issue
Block a user