首页 > 解决方案 > Flutter 从应用缓存播放本地音频文件

问题描述

我正在使用Flutter Cache Manager包来缓存音频文件,我使用这种方法来缓存文件 await DefaultCacheManager().downloadFile(url);,然后我使用 FileInfo item = await DefaultCacheManager().getFileFromCache(cacheKey);并且这个过程工作正常。打印 item.file.path 时,它会给出带有正确扩展名 (.mp3) 的文件的确切路径。然后我找到了一个从缓存播放文件的解决方案,但它给出了错误。

final file = new File(item.file.path);
String url = file.uri.path;
await file.writeAsBytes((await rootBundle.load(url)).buffer.asUint8List());
var _audioSrc = AudioSource.uri(
    Uri.file(url),
    tag: response[i]
);
print(_audioSrc.uri);
AudioPlayer().setAudioSource(_audioSrc);

请注意,print(_audioSrc.uri); 它给出了文件的路径,例如

file:///var/mobile/Containers/Data/Application/61327A88-3B02-43CC-BCBB-76BC5E29E55F/Library/Caches/libCachedImageData/fa81fb50-3460-11ec-b813-05717f61c9c5.mp3

但它不会播放,并且在 IOS 和 Android 上都会出现以下错误

[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: (-11828) Cannot Open
#0      AudioPlayer._load (package:just_audio/just_audio.dart:785:9)
<asynchronous suspension>
#1      AudioPlayer._setPlatformActive.setPlatform (package:just_audio/just_audio.dart:1351:28)
<asynchronous suspension>

IOS上的这个错误

NSURLConnection finished with error - code -1002

标签: androidiosflutter

解决方案


推荐阅读