如何获取所有缓存音频的列表?

How to get a list of all cached audio?

例如,我的 Podcast 应用程序有所有已下载 Podcast 的列表,我如何获得使用 request() 方法下载的所有 LockCachingAudioSource 的列表?

创建 LockCachingAudioSource 实例时,您可以选择要保存它们的位置。如果为此目的创建目录,则可以使用 Dart 的文件 I/O API 获得目录列表。目录列表还将显示部分下载的文件和其他您想要忽略的临时文件。它们有扩展名 .mime.part.

解释完后,这里有一个解决方案。首先,在应用程序初始化期间创建缓存目录:

final cacheDir = File('/your/choice/of/location');
...
await cacheDir.create(recursive: true);

然后对于每个音频源,像这样创建它:

import 'package:path/path.dart' as p;

...

source = LockCachingAudioSource(
  uri,
  cacheFile: File(p.joinAll([cacheDir, 'yourChoiceOfName.mp3'],
);

现在您可以随时通过列出 cacheDir 并忽略任何临时文件来获取已下载文件的列表:

final downloadedFiles = (await _getCacheDir()).list().where((f) =>
    !['mime', 'part'].contains(f.path.replaceAll(RegExp(r'^.*\.'), '')));

如果您需要将这些文件转回原始 URI,您可以创建自己的数据库来存储哪个文件对应哪个 URI,或者通过对 URI 进行编码来选择每个缓存文件的文件名在 base64 或可逆的东西中,所以给定一个文件名,然后你可以将它解码回原始 URI。