diff --git a/lib/pages/settings_page.dart b/lib/pages/settings_page.dart index 0d3a947..0478289 100644 --- a/lib/pages/settings_page.dart +++ b/lib/pages/settings_page.dart @@ -75,6 +75,7 @@ class _SettingsDialogState extends ConsumerState { Widget build(BuildContext context) { final cs = ShadTheme.of(context).colorScheme; final themeState = ref.watch(themeProvider); + final mediaState = ref.watch(mediaLibraryProvider); return ShadDialog( title: const Text('设置'), @@ -235,6 +236,31 @@ class _SettingsDialogState extends ConsumerState { ), ), ), + _SettingsRow( + icon: Icons.refresh_rounded, + label: '全盘文件索引', + child: ShadButton.outline( + size: ShadButtonSize.sm, + onPressed: mediaState.isRefreshingCloudIndex + ? null + : () => ref + .read(mediaLibraryProvider.notifier) + .refreshGlobalCloudIndex(force: true), + leading: mediaState.isRefreshingCloudIndex + ? SizedBox( + width: 14, + height: 14, + child: CircularProgressIndicator( + strokeWidth: 2, + color: cs.primary, + ), + ) + : const Icon(Icons.refresh_rounded, size: 15), + child: Text( + mediaState.isRefreshingCloudIndex ? '刷新中' : '立即刷新', + ), + ), + ), _SettingsRow( icon: Icons.format_list_numbered_rounded, label: '默认分页大小', diff --git a/lib/providers/media_library_provider.dart b/lib/providers/media_library_provider.dart index 2155a57..6107ae9 100644 --- a/lib/providers/media_library_provider.dart +++ b/lib/providers/media_library_provider.dart @@ -41,6 +41,7 @@ class MediaLibraryState { final List items; final bool isLoading; final bool isScanning; + final bool isRefreshingCloudIndex; final MediaLibraryScanProgress progress; final List scanLogs; final String searchQuery; @@ -53,6 +54,7 @@ class MediaLibraryState { this.items = const [], this.isLoading = false, this.isScanning = false, + this.isRefreshingCloudIndex = false, this.progress = const MediaLibraryScanProgress(), this.scanLogs = const [], this.searchQuery = '', @@ -87,6 +89,7 @@ class MediaLibraryState { List? items, bool? isLoading, bool? isScanning, + bool? isRefreshingCloudIndex, MediaLibraryScanProgress? progress, List? scanLogs, String? searchQuery, @@ -103,6 +106,8 @@ class MediaLibraryState { items: items ?? this.items, isLoading: isLoading ?? this.isLoading, isScanning: isScanning ?? this.isScanning, + isRefreshingCloudIndex: + isRefreshingCloudIndex ?? this.isRefreshingCloudIndex, progress: progress ?? this.progress, scanLogs: scanLogs ?? this.scanLogs, searchQuery: searchQuery ?? this.searchQuery, @@ -586,6 +591,7 @@ class MediaLibraryNotifier extends StateNotifier { } } _refreshingCloudIndex = true; + state = state.copyWith(isRefreshingCloudIndex: true); try { AppLogger.info('CloudIndex', '开始刷新全盘文件索引'); final files = await _allGlobalRemoteFiles(); @@ -605,6 +611,7 @@ class MediaLibraryNotifier extends StateNotifier { _appendScanLog('[云盘索引] 刷新失败:$error', isError: true); } finally { _refreshingCloudIndex = false; + state = state.copyWith(isRefreshingCloudIndex: false); _scheduleCloudIndexRefresh(minutes); } }