app-starlock/lib/main/lockDetail/videoLog/widget/video_player_widget.dart

76 lines
2.4 KiB
Dart

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<VideoPlayerWidget> {
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: <Widget>[
// 使用 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, // 允许用户拖动进度条进行快进/快退
),
],
),
);
}
}