// lib/services/metadata_events.dart import 'dart:async'; /// 一条元数据更新(path + songs 表的最新行) class MetadataUpdate { final String path; final Map row; const MetadataUpdate(this.path, this.row); } /// 元数据更新事件总线。 /// /// 之前各列表页靠"返回时重查"来刷新,歌曲补全标签后要退出重进才看得到。 /// 现在 MetadataService 写库成功后 publish,订阅的页面按 path 局部更新。 class MetadataEvents { static final MetadataEvents _instance = MetadataEvents._internal(); factory MetadataEvents() => _instance; MetadataEvents._internal(); final StreamController _controller = StreamController.broadcast(); Stream get stream => _controller.stream; void publish(String path, Map row) { if (path.isEmpty) return; _controller.add(MetadataUpdate(path, row)); } }