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`将会裁剪超出边界的视频部分,确保视频保持居中。
0
0

Flutter高级进阶实战-仿哔哩哔哩-掌握Flutter高阶技能

一次性掌握Flutter高阶技能+商业级复杂项目架构设计与开发方案

1722 学习 · 870 问题

查看课程