From 83ab47d8fcd43d4b57a3d04bc69f90add4cc2f23 Mon Sep 17 00:00:00 2001 From: lxh2875931338 Date: Sun, 1 Nov 2026 12:22:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(metadata):=20=E8=A1=A5=E4=B8=8A=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E8=AE=A2=E9=98=85=EF=BC=8C=E7=BC=93=E5=AD=98=E5=91=BD?= =?UTF-8?q?=E4=B8=AD=E4=B9=9F=E6=8E=A8=E9=80=81=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一条只加了字段和回调,listen 没插进去(列表不会刷新)。 另外歌曲元数据在 SQLite 命中时直接 return,也不会发事件—— 导致"标签其实早就在库里、列表却还显示文件名"。 - HomePage / WebDAVFileListPage 补上 stream.listen 与 cancel - MetadataService 的 SQLite 命中分支也 publish 一次(幂等,按 path 覆盖) 验证方式:播放一首收藏里显示文件名的歌 -> 返回主页 -> 该行应变为标签标题。 --- lib/metadata/metadata_service.dart | 3 +++ lib/pages/home_page.dart | 2 ++ lib/pages/webdav_file_list_page.dart | 2 ++ 3 files changed, 7 insertions(+) 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(); }