just_audio_windows在Windows端调用seek无法跳转播放时长报错
问题描述
Windows 10系统下使用just_audio_windows编译Flutter应用时,播放器跳转指定播放时长功能失效,运行时抛出如下异常:
[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: PlatformException(position, the position argument can not be null, null, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:167:18) <asynchronous suspension> #2 MethodChannelAudioPlayer.seek (package:just_audio_platform_interface/method_channel_just_audio.dart:152:34) <asynchronous suspension> #3 AudioPlayer.seek (package:just_audio/just_audio.dart:1070:9) <asynchronous suspension>
问题原因
该异常是just_audio_windows旧版本的已知实现缺陷:
- 部分低版本插件的Windows原生端和Flutter端的参数传值逻辑存在漏洞,seek方法调用时position参数没有正确传递到原生层
- 调用seek的时机不对:音频资源还未完成初始化、总时长未加载完成时就触发跳转,此时参数传递链路中position会被识别为null值,触发平台层的空校验报错
解决方案
- 升级插件版本:打开项目的
pubspec.yaml文件,将just_audio和just_audio_windows依赖升级到最新稳定版本,执行flutter pub get拉取更新后的依赖,官方已经在新版本中修复了参数传递的逻辑bug。 - 增加seek调用前置校验:不要在音频刚初始化、还未加载出有效时长时直接调用seek方法,等播放器状态就绪、总时长非空时再执行跳转,参考代码:
// 校验播放器状态,避免时序问题 if (audioPlayer.duration != null && audioPlayer.processingState != ProcessingState.loading && audioPlayer.processingState != ProcessingState.idle) { // 传入目标跳转时长执行seek await audioPlayer.seek(Duration(seconds: targetSecond)); }
- 增加异常兜底重试:如果业务场景需要在音频加载初期就触发跳转,可以用try-catch包裹seek调用,捕获到该参数空异常时,延迟100~200ms后重试,直到跳转成功。
内容的提问来源于stack exchange,提问作者Chuchet
相关产品推荐
相关产品推荐

