// lib/utils/song_key.dart import 'dart:convert'; import 'package:crypto/crypto.dart'; /// 歌曲缓存键(song_key)。 /// /// 只使用「远程路径 + 文件大小」这类稳定信息: /// - 不能用 String.hashCode:语义上不保证跨运行稳定(虽然当前 VM 实现是稳定的), /// 用它做持久化键属于依赖未定义行为; /// - 不能用本地临时文件的 mtime:WebDAV 的元数据预览文件会被系统清缓存、 /// 或超过 24h 后重新下载,mtime 每次都变,键跟着变 → 缓存永远 miss。 /// /// 因此这里用 md5(url|size)。文件被替换但大小不变时不会自动失效, /// 由“清除单曲缓存 / forceRefresh”兜底。 String songKeyFor(String url, int fileSize) { return md5.convert(utf8.encode('$url|$fileSize')).toString(); } /// 只依赖 URL 的稳定键,用于临时文件命名、拿不到 stat 的场景。 String songKeyForUrl(String url) { return md5.convert(utf8.encode(url)).toString(); }