fix(metadata): 补上事件订阅,缓存命中也推送一次
上一条只加了字段和回调,listen 没插进去(列表不会刷新)。 另外歌曲元数据在 SQLite 命中时直接 return,也不会发事件—— 导致"标签其实早就在库里、列表却还显示文件名"。 - HomePage / WebDAVFileListPage 补上 stream.listen 与 cancel - MetadataService 的 SQLite 命中分支也 publish 一次(幂等,按 path 覆盖) 验证方式:播放一首收藏里显示文件名的歌 -> 返回主页 -> 该行应变为标签标题。
This commit is contained in:
@@ -119,6 +119,9 @@ class MetadataService {
|
|||||||
source: 'database',
|
source: 'database',
|
||||||
);
|
);
|
||||||
await _memoryCache.put(fileId, metadata);
|
await _memoryCache.put(fileId, metadata);
|
||||||
|
// 命中也推一次:列表页可能是元数据写入前加载的,
|
||||||
|
// 靠这次事件把那一行补上(幂等,订阅方按 path 覆盖)。
|
||||||
|
MetadataEvents().publish(fileId, dbSong);
|
||||||
return metadata;
|
return metadata;
|
||||||
}
|
}
|
||||||
debugPrint('🔁 [MetadataService] 记录未验证'
|
debugPrint('🔁 [MetadataService] 记录未验证'
|
||||||
|
|||||||
@@ -203,6 +203,7 @@ class _HomePageState extends BaseState<HomePage> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_scrollController = ScrollController()..addListener(_onScroll);
|
_scrollController = ScrollController()..addListener(_onScroll);
|
||||||
|
_metaSub = MetadataEvents().stream.listen(_onMetadataUpdate);
|
||||||
_initWebDAV();
|
_initWebDAV();
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
@@ -212,6 +213,7 @@ class _HomePageState extends BaseState<HomePage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
_metaSub?.cancel();
|
||||||
_homePageController.dispose();
|
_homePageController.dispose();
|
||||||
_scrollController.dispose();
|
_scrollController.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
|
|||||||
@@ -48,11 +48,13 @@ class _WebDAVFileListPageState extends BaseState<WebDAVFileListPage> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
_currentPath = widget.currentPath;
|
_currentPath = widget.currentPath;
|
||||||
AudioService().addListener(_onPlaybackChanged);
|
AudioService().addListener(_onPlaybackChanged);
|
||||||
|
_metaSub = MetadataEvents().stream.listen(_onMetadataUpdate);
|
||||||
_loadDirectory();
|
_loadDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
_metaSub?.cancel();
|
||||||
AudioService().removeListener(_onPlaybackChanged);
|
AudioService().removeListener(_onPlaybackChanged);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user