Flutter Better Player中onPlayerVisibilityChanged参数使用方法咨询
关于Better Player中
onPlayerVisibilityChanged参数的使用说明 核心作用
onPlayerVisibilityChanged是一个Function(bool)类型的回调,用来向BetterPlayer核心层同步你自定义控件的显示/隐藏状态。播放器内部会根据这个状态处理触摸事件拦截、自动隐藏逻辑联动等核心行为。
具体用法
你需要在自定义控件的状态变化时主动调用这个回调,传递当前控件的可见状态(true为显示,false为隐藏),以下是完整的自定义控件示例:
class CustomControlsWidget extends StatefulWidget { final BetterPlayerController controller; final Function(bool) onControlsVisibilityChanged; const CustomControlsWidget({ super.key, required this.controller, required this.onControlsVisibilityChanged, }); @override State<CustomControlsWidget> createState() => _CustomControlsWidgetState(); } class _CustomControlsWidgetState extends State<CustomControlsWidget> { bool _controlsVisible = true; Timer? _hideControlsTimer; @override void initState() { super.initState(); // 初始化时通知播放器:控件已显示 widget.onControlsVisibilityChanged(true); _startHideControlsTimer(); } // 启动控件自动隐藏定时器 void _startHideControlsTimer() { _hideControlsTimer?.cancel(); _hideControlsTimer = Timer(const Duration(milliseconds: 1000), () { if (mounted) { setState(() => _controlsVisible = false); // 通知播放器:控件已隐藏 widget.onControlsVisibilityChanged(false); } }); } // 切换控件显示/隐藏状态 void _toggleControls() { setState(() => _controlsVisible = !_controlsVisible); // 同步状态给播放器核心 widget.onControlsVisibilityChanged(_controlsVisible); if (_controlsVisible) { _startHideControlsTimer(); } else { _hideControlsTimer?.cancel(); } } @override Widget build(BuildContext context) { return GestureDetector( // 触摸屏幕切换控件显示状态 onTap: _toggleControls, child: Visibility( visible: _controlsVisible, child: Container( color: Colors.black12, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ IconButton( icon: Icon( widget.controller.isPlaying() ? Icons.pause : Icons.play_arrow, color: Colors.white, ), onPressed: () { widget.controller.togglePlay(); // 点击按钮后保持控件可见,同步状态并重启定时器 setState(() => _controlsVisible = true); widget.onControlsVisibilityChanged(true); _startHideControlsTimer(); }, ), // 可添加进度条、音量控制等其他自定义控件 ], ), ), ), ); } @override void dispose() { _hideControlsTimer?.cancel(); super.dispose(); } }
关键调用场景
- 控件初始化显示时,必须调用一次
onControlsVisibilityChanged(true) - 自动隐藏定时器触发、控件切换为隐藏状态时,调用
onControlsVisibilityChanged(false) - 触摸屏幕切换控件显示/隐藏时,同步传递当前状态
- 点击播放/暂停等交互按钮时,需要将控件状态切回显示并同步给播放器
内容的提问来源于stack exchange,提问作者CCP
相关产品推荐
相关产品推荐

