import 'package:flutter/material.dart'; import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; import 'package:star_lock/main/lockDetail/videoLog/videoLogDetail/controlsOverlay_page.dart'; import 'package:video_player/video_player.dart'; class VideoPlayerWidget extends StatefulWidget { final String videoUrl; final RecordListData recordListData; VideoPlayerWidget({required this.videoUrl, required this.recordListData}); @override _VideoPlayerWidgetState createState() => _VideoPlayerWidgetState(); } class _VideoPlayerWidgetState extends State { late VideoPlayerController _controller; @override void initState() { super.initState(); // 初始化 VideoPlayerController _controller = VideoPlayerController.network(widget.videoUrl) ..initialize().then((_) { // 视频初始化完成后更新UI setState(() {}); }); } @override void dispose() { // 清理资源 _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Container( height: 200, // 固定高度为200像素 child: Stack( alignment: Alignment.bottomCenter, children: [ // 使用 FittedBox 来适配视频尺寸 Center( child: _controller.value.isInitialized ? AspectRatio( aspectRatio: _controller.value.aspectRatio, // 保持视频的原始宽高比 child: FittedBox( fit: BoxFit.cover, // 确保视频填满整个区域,可能会裁剪部分内容 child: SizedBox( width: _controller.value.size.width, height: _controller.value.size.height, child: VideoPlayer(_controller), ), ), ) : Container(), // 加载中显示转圈 ), ControlsOverlay( controller: _controller, recordData: widget.recordListData, ), // 控制覆盖层组件 if (!_controller.value.isPlaying) VideoProgressIndicator( _controller, colors: VideoProgressColors(playedColor: Colors.red), allowScrubbing: true, // 允许用户拖动进度条进行快进/快退 ), ], ), ); } }