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

Flutter使用flick_video_player播放视频后状态栏变黑问题求解

问题根因

你代码中FlickVideoPlayer的systemUIOverlay参数传入了空数组,插件初始化时会隐藏所有系统UI(包含状态栏),且你未在页面销毁时主动恢复系统UI配置,因此退出视频页后状态栏也不会自动恢复正常显示。

修复步骤
  1. 首先导入services包:
import 'package:flutter/services.dart';
  1. 修改FlickVideoPlayer的systemUIOverlay配置,指定正常播放时需要保留的系统UI:
    将原配置systemUIOverlay: [],替换为:
// 保留状态栏和底部虚拟导航栏
systemUIOverlay: SystemUiOverlay.values,
  1. 在_VideoState的dispose方法中添加系统UI恢复逻辑,避免异常场景下状态栏无法还原:
    修改后的dispose方法如下:
@override
void dispose() {
  flickManager.dispose();
  // 强制恢复系统UI显示
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values);
  // 如果你的应用有自定义状态栏样式,可在此处恢复指定样式,示例:
  // SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
  //   statusBarColor: Colors.white,
  //   statusBarIconBrightness: Brightness.dark
  // ));
  super.dispose();
}
可选优化(全屏场景适配)

如果需要在视频进入全屏时隐藏状态栏、退出全屏时恢复状态栏,可以给flickManager添加全屏状态监听:

@override
void initState() {
  super.initState();
  flickManager = FlickManager(
    videoPlayerController: VideoPlayerController.asset('assets/videos/video.mp4')
  );
  // 监听全屏状态变化
  flickManager.flickControlManager?.addListener(() {
    final isFullscreen = flickManager.flickControlManager?.isFullscreen ?? false;
    if (isFullscreen) {
      // 全屏时隐藏状态栏
      SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);
    } else {
      // 退出全屏恢复状态栏
      SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values);
    }
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:08