Flutter使用just_audio开发广播应用启动时空检查运算符报错如何解决
错误原因
报错由你代码中第二个StreamBuilder<SequenceState?>的空值强制断言触发:你没有对state、state.currentSource做非空校验,就直接使用!强制声明非空,当播放器初始化未完成、序列为空时,state为null就会抛出该错误。
// 错误的逻辑: final state = snapshot.data; final sequence = state?.sequence ?? []; final metadata = state!.currentSource!.tag as AudioMetadata; // state为空时直接崩溃
修复步骤
- 给第二个StreamBuilder补充非空校验逻辑,无有效数据时返回占位组件即可:
builder: (context, snapshot) { final state = snapshot.data; // 序列为空/state为空时返回空占位 if (state?.sequence.isEmpty ?? true) return const SizedBox(); // 额外校验当前播放源非空 if (state?.currentSource == null) return const SizedBox(); final sequence = state!.sequence; final metadata = state.currentSource!.tag as AudioMetadata; // 原有ListView逻辑保持不变 ... }
- 可选优化:给第一个StreamBuilder也补充
currentSource非空判断,避免极端场景崩溃:
// 第一个StreamBuilder原有判断后新增: if (state?.sequence.isEmpty ?? true) return SizedBox(); if (state?.currentSource == null) return SizedBox(); // 新增校验 final metadata = state!.currentSource!.tag as AudioMetadata;
- 边缘场景兼容:给
Image.network添加错误占位逻辑,避免音频封面链接为空/加载失败导致的报错:
Image.network( metadata.artwork ?? "", scale: 1.5, errorBuilder: (context, error, stackTrace) => const Icon(Icons.music_note, size: 100), )
内容的提问来源于stack exchange,提问作者Rogerio
相关产品推荐
相关产品推荐

