例如,我的播客应用程序有一个所有下载播客的列表,我如何获得使用request((方法下载的所有LockCachingAudioSource的列表?
创建LockCachingAudioSource
实例时,可以选择保存它们的位置。如果您为此目的创建了一个目录,您可以使用Dart的文件I/O API获得一个目录列表。目录列表还将显示部分下载的文件和其他要忽略的临时文件。它们具有扩展CCD_ 2和CCD_。
在解释了这一点之后,这里有一个解决方案。首先,在应用初始化期间创建缓存目录:
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的,或者你可以通过用base64或其他可反转的东西编码URI来选择每个缓存文件的文件名,所以给定一个文件名,你就可以将其解码回原始URI。