diff --git a/lib/metadata/metadata_service.dart b/lib/metadata/metadata_service.dart index 11a720a..80e9b62 100644 --- a/lib/metadata/metadata_service.dart +++ b/lib/metadata/metadata_service.dart @@ -119,6 +119,9 @@ class MetadataService { source: 'database', ); await _memoryCache.put(fileId, metadata); + // 命中也推一次:列表页可能是元数据写入前加载的, + // 靠这次事件把那一行补上(幂等,订阅方按 path 覆盖)。 + MetadataEvents().publish(fileId, dbSong); return metadata; } debugPrint('🔁 [MetadataService] 记录未验证' diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 595250a..c5783ee 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -203,6 +203,7 @@ class _HomePageState extends BaseState { void initState() { super.initState(); _scrollController = ScrollController()..addListener(_onScroll); + _metaSub = MetadataEvents().stream.listen(_onMetadataUpdate); _initWebDAV(); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -212,6 +213,7 @@ class _HomePageState extends BaseState { @override void dispose() { + _metaSub?.cancel(); _homePageController.dispose(); _scrollController.dispose(); super.dispose(); diff --git a/lib/pages/webdav_file_list_page.dart b/lib/pages/webdav_file_list_page.dart index e1d13e4..f65d5a3 100644 --- a/lib/pages/webdav_file_list_page.dart +++ b/lib/pages/webdav_file_list_page.dart @@ -48,11 +48,13 @@ class _WebDAVFileListPageState extends BaseState { super.initState(); _currentPath = widget.currentPath; AudioService().addListener(_onPlaybackChanged); + _metaSub = MetadataEvents().stream.listen(_onMetadataUpdate); _loadDirectory(); } @override void dispose() { + _metaSub?.cancel(); AudioService().removeListener(_onPlaybackChanged); super.dispose(); }