Flutter使用Slider组件时报闭包上下文要求void却返回Future类型错误
错误产生原因
Slider组件的onChanged回调要求传入的闭包返回值为void,不需要任何返回结果。你在onChanged的实现中使用了return语句返回audioPlayer!.seek()方法的执行结果,而音频播放器的seek方法是异步操作,返回值为Future类型,和闭包要求的void返回类型不匹配,因此触发The return type 'Future' isn't a 'void', as required by the closure's context报错。
解决方法
有两种常用的修改方案,可根据你的业务需求选择:
- 方案一:直接删除
return关键字,无需返回seek方法的执行结果,符合onChanged回调的返回值要求,修改后的代码如下:
Slider( value: position!.inMilliseconds.toDouble(), onChanged: (double value) { audioPlayer!.seek((value / 1000).roundToDouble()); }, min: 0.0, max: duration!.inMilliseconds.toDouble(), ),
- 方案二:如果你需要在
seek操作完成后执行后续逻辑,可以给闭包加上async修饰,配合await等待异步操作结束,同样不需要添加return语句,示例代码如下:
Slider( value: position!.inMilliseconds.toDouble(), onChanged: (double value) async { await audioPlayer!.seek((value / 1000).roundToDouble()); // 可在此处添加seek完成后的后续业务逻辑 }, min: 0.0, max: duration!.inMilliseconds.toDouble(), ),
内容的提问来源于stack exchange,提问作者Mike Osborn
相关产品推荐
相关产品推荐

