video_player 实现类似centerCrop的效果
来源:1-2 课程导学

慕设计5218244
2024-03-14
flutter video_player 固定播放器尺寸,播放视频不拉伸不压缩,视频一边占满另一边进行剪切,如何实现?
就像如下图android 的ImageView centerCrop属性一样效果
写回答
1回答
-
CrazyCodeBoy
2024-03-15
要在Flutter中实现类似于Android中的`centerCrop`效果,你可以使用`FittedBox`和`ClipRect`组合来实现。以下是一个简单的示例代码:
```dart
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Center Crop Video'),
),
body: CenterCropVideo(),
),
);
}
}
class CenterCropVideo extends StatefulWidget {
@override
_CenterCropVideoState createState() => _CenterCropVideoState();
}
class _CenterCropVideoState extends State<CenterCropVideo> {
late VideoPlayerController _controller;
bool _initialized = false;
@override
void initState() {
super.initState();
_controller = VideoPlayerController.network(
'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4')
..initialize().then((_) {
setState(() {
_initialized = true;
});
});
}
@override
Widget build(BuildContext context) {
return _initialized
? FittedBox(
fit: BoxFit.cover,
child: SizedBox(
width: _controller.value.size.width,
height: _controller.value.size.height,
child: ClipRect(
child: OverflowBox(
alignment: Alignment.center,
child: VideoPlayer(_controller),
),
),
),
)
: CircularProgressIndicator();
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
}
```
在这个示例中,`FittedBox`的`fit`属性设置为`BoxFit.cover`,这会导致视频按比例放大以填充可用空间。然后,`ClipRect`将会裁剪超出边界的视频部分,确保视频保持居中。00
相似问题