You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:48:08