76 lines
2.4 KiB
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, // 允许用户拖动进度条进行快进/快退
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|