Flutter使用flick_video_player播放视频后状态栏变黑问题求解
问题根因
你代码中FlickVideoPlayer的systemUIOverlay参数传入了空数组,插件初始化时会隐藏所有系统UI(包含状态栏),且你未在页面销毁时主动恢复系统UI配置,因此退出视频页后状态栏也不会自动恢复正常显示。
修复步骤
- 首先导入services包:
import 'package:flutter/services.dart';
- 修改
FlickVideoPlayer的systemUIOverlay配置,指定正常播放时需要保留的系统UI:
将原配置systemUIOverlay: [],替换为:
// 保留状态栏和底部虚拟导航栏 systemUIOverlay: SystemUiOverlay.values,
- 在
_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
相关产品推荐
相关产品推荐

