Flutter just_audio报错:MediaItem类型无法转换为String?类型
问题解决:_CastError (type 'MediaItem' is not a subtype of type 'String?' in type cast)
核心原因
你同时引入了just_audio和audioplayers两个音频播放库,二者存在类冲突(比如可能均定义了MediaItem相关类型),导致just_audio无法正确识别你传入的MediaItem实例,触发类型转换错误。
解决方案
1. 移除冲突依赖
在pubspec.yaml中删除audioplayers: ^3.0.1依赖,因为你实际使用的是just_audio的AudioPlayer,不需要同时保留两个音频库。执行flutter pub get更新依赖。
2. 确认MediaItem的导入来源
确保代码中MediaItem是来自just_audio_background的导入,而非其他库:
import 'package:just_audio_background/just_audio_background.dart';
3. 优化代码逻辑(可选)
原代码单独处理第一个曲目再循环剩余项,逻辑冗余,可简化为直接遍历所有曲目生成播放列表:
final playlist = ConcatenatingAudioSource(children: []); for (var track in tracs) { final adr = '${_appDocumentsDirectory}/${track.id}.mp3'; final audioSource = track.isDownload ? AudioSource.uri(Uri.file(adr)) : AudioSource.uri(Uri.parse(track.sound)); playlist.add(ClippingAudioSource( child: audioSource, tag: MediaItem( id: '${_nextMediaId++}', title: track.text, displaySubtitle: text, // 注意这里的text变量需确保已定义 artUri: Uri.parse(art), // art变量需确保已定义 genre: track.video, ), )); } await audioPlayer.setAudioSource(playlist);
4. 版本兼容性检查
确认just_audio与just_audio_background版本匹配,just_audio: ^0.9.32可搭配just_audio_background: ^0.0.1-beta.11(更稳定的beta版本),若仍有问题,可尝试升级两个库到最新兼容版本。
内容的提问来源于stack exchange,提问作者MMSH
相关产品推荐
相关产品推荐

