// lib/utils/song_key.dart import 'dart:convert'; import 'package:crypto/crypto.dart'; /// 歌曲缓存键(song_key)。 /// /// 只用 URL:元数据读取是"分阶段取头部"的,第一次可能只取 128KB、 /// 第二次补到 512KB。如果键里带文件大小,两次会得到不同的键,缓存立刻失效; /// URL 在这些阶段之间是稳定的。 /// /// 代价:同一个 URL 换了文件内容时不会自动失效,由"清除单曲缓存 / /// forceRefresh"兜底。 String songKeyFor(String url) { return md5.convert(utf8.encode(url)).toString(); } /// 语义化别名,用于临时文件命名等场景。 String songKeyForUrl(String url) => songKeyFor(url);