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

Flutter中State初始化时seekTo()方法无法生效问题求助

YouTube视频播放器无法从指定时间点启动的问题

我用Flutter的youtube_player_flutter库实现了YouTube视频播放功能,需求是让视频从指定时间点开始播放,但目前播放器总是从0秒开始,不符合预期。以下是我的代码:

class _stretchDetailState extends State<stretchDetail>{
  late YoutubePlayerController _controller;
  @override
  void initState(){
    int skipTo = widget.data_transfer.last;
    _controller = YoutubePlayerController(
      initialVideoId: widget.data_transfer[4],   // Youtube Id 
      flags: YoutubePlayerFlags(
        autoPlay: true,
        mute: false,
      ),

    );
    _controller.seekTo(Duration(seconds: skipTo));  // skipTo is int var that tell from when to start.
  }
  Widget build(BuildContext context) {
//    _controller.seekTo(Duration(seconds: skipTo));
    return Scaffold(
      body:Column(
        children: [
          YoutubePlayer(
            controller: _controller,
            showVideoProgressIndicator: true,
          ),
          Container(
            height:20
          ),

        ],
      )

    );
  }
}

问题原因及解决办法

  • 核心问题:调用时机错误
    你在initState中直接调用seekTo,但此时播放器尚未完成初始化,视频资源还未加载完成,这个跳转指令不会被执行。

方法一:初始化时直接指定起始时间(推荐)

YoutubePlayerFlags提供了startAt参数,可以直接在初始化控制器时设置视频的起始播放秒数,无需额外调用seekTo:

@override
void initState(){
  int skipTo = widget.data_transfer.last;
  _controller = YoutubePlayerController(
    initialVideoId: widget.data_transfer[4],
    flags: YoutubePlayerFlags(
      autoPlay: true,
      mute: false,
      startAt: skipTo, // 直接设置起始播放秒数
    ),
  );
}

方法二:监听播放器状态,在就绪后跳转

如果需要更灵活的控制逻辑,可以通过监听播放器状态,在视频进入ready状态后执行跳转:

@override
void initState(){
  int skipTo = widget.data_transfer.last;
  _controller = YoutubePlayerController(
    initialVideoId: widget.data_transfer[4],
    flags: YoutubePlayerFlags(
      autoPlay: true,
      mute: false,
    ),
  );

  // 添加状态监听器
  _controller.addListener(() {
    if (_controller.value.playerState == PlayerState.ready) {
      _controller.seekTo(Duration(seconds: skipTo));
      // 仅需执行一次的话,可在此移除监听器避免重复触发
      _controller.removeListener(() {});
    }
  });
}

另外需要确认skipTo的值为有效的正整数,若该值为0或负数,播放器也会默认从0秒开始播放。

内容的提问来源于stack exchange,提问作者MooNChilD Song

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:43:12