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

Flutter使用youtube_player_flutter:^8.1.1实现视频启动自动全屏

实现youtube_player_flutter视频启动时自动全屏

要实现视频启动时自动全屏,你可以借助控制器的状态监听或YoutubePlayerBuilder的onReady回调,在视频准备就绪后触发全屏操作,同时调整自动播放配置。以下是修改后的完整代码:

late YoutubePlayerController _controller;

@override
void initState() {
  _controller = YoutubePlayerController(
    initialVideoId: 'zgOdG2lQQAC',
    flags: const YoutubePlayerFlags(
      autoPlay: true, // 开启自动播放,配合自动全屏逻辑
      loop: false,
    ),
  );
  
  // 监听播放器状态,视频开始播放时触发全屏
  _controller.addListener(() {
    if (_controller.value.playerState == PlayerState.playing && !_controller.value.isFullScreen) {
      _controller.enterFullScreen();
    }
  });
  
  super.initState();
}

@override
void dispose() {
  _controller.dispose();
  super.dispose();
}

@override
Widget build(BuildContext context) {
  return YoutubePlayerBuilder(
    player: YoutubePlayer(controller: _controller),
    builder: (context, player) {
      return Scaffold(
        appBar: const AppBarWidget(appBarTitle: solutionVideos),
        body: Padding(
          padding: EdgeInsets.symmetric(
            horizontal: context.dynamicWidth(20),
            vertical: context.dynamicWidth(20),
          ),
          child: Column(
            children: [
              SizedBox(
                width: context.dynamicWidth(2.2),
                height: context.dynamicHeight(6),
                child: player,
              ),
            ],
          ),
        ),
      );
    },
  );
}

关键改动说明:

  • 开启自动播放:将YoutubePlayerFlags中的autoPlay设为true,视频需进入播放状态才能触发全屏逻辑,自动播放更贴合"启动时自动全屏"的需求。
  • 添加状态监听器:通过addListener监听播放器状态,检测到视频处于playing状态且未全屏时,调用enterFullScreen()触发全屏。
  • 资源清理:在dispose方法中销毁控制器,避免内存泄漏。

你也可以用YoutubePlayerBuilder的onReady回调实现,代码更简洁:

@override
Widget build(BuildContext context) {
  return YoutubePlayerBuilder(
    player: YoutubePlayer(controller: _controller),
    onReady: () {
      // 视频加载完成后直接触发全屏
      _controller.enterFullScreen();
      // 若需自动播放,可在此调用_controller.play();
    },
    builder: (context, player) {
      // 原有build代码保持不变
      return Scaffold(...);
    },
  );
}

这种方式无需监听状态,视频准备就绪后直接触发全屏,适合不需要等待播放状态的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:40:35