周末不想在家 2024-03-13 16:09 采纳率: 6.5%
浏览 78

flutter video_player播放器全屏,但是不要拉伸视频

flutter video_player库的播放器想要全屏,但是不要拉伸视频
如何代码实现?

  • 写回答

3条回答 默认 最新

  • Kwan的解忧杂货铺 2024-03-13 16:10
    关注

    周末不想在家 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    要实现Flutter video_player播放器全屏,但不拉伸视频,可以采用以下步骤:

    1. 创建一个全屏弹出对话框,用于展示视频播放器。

    2. 设置对话框的背景色为黑色,以提供更好的观看体验。

    3. 在对话框中添加一个Stack组件,用于叠加视频播放器和其他UI控件。

    4. 将video_player组件添加到Stack中,并使用AspectRatio组件将视频按照原始比例展示。

    5. 添加其他UI控件,比如控制条等。

    具体代码如下:

    import 'package:flutter/material.dart';
    import 'package:video_player/video_player.dart';
    
    class FullScreenVideoPlayer extends StatefulWidget {
      final String videoUrl;
    
      FullScreenVideoPlayer({
        @required this.videoUrl,
      });
    
      @override
      _FullScreenVideoPlayerState createState() => _FullScreenVideoPlayerState();
    }
    
    class _FullScreenVideoPlayerState extends State<FullScreenVideoPlayer> {
      VideoPlayerController _videoPlayerController;
      Future<void> _initializeVideoPlayerFuture;
      bool _isPlaying = false;
    
      @override
      void initState() {
        super.initState();
        _videoPlayerController = VideoPlayerController.network(widget.videoUrl);
        _initializeVideoPlayerFuture = _videoPlayerController.initialize();
      }
    
      @override
      void dispose() {
        _videoPlayerController.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Dialog(
          backgroundColor: Colors.black,
          child: Stack(
            children: <Widget>[
              AspectRatio(
                aspectRatio: _videoPlayerController.value.aspectRatio,
                child: VideoPlayer(_videoPlayerController),
              ),
              Center(
                child: IconButton(
                  icon: Icon(
                    _isPlaying ? Icons.pause : Icons.play_arrow,
                    color: Colors.white,
                    size: 50.0,
                  ),
                  onPressed: () {
                    setState(() {
                      if (_isPlaying) {
                        _videoPlayerController.pause();
                      } else {
                        _videoPlayerController.play();
                      }
                      _isPlaying = !_isPlaying;
                    });
                  },
                ),
              ),
            ],
          ),
        );
      }
    }
    

    使用方法示例:

    void _showFullScreenVideoPlayer(BuildContext context) {
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return FullScreenVideoPlayer(
            videoUrl: 'your_video_url',
          );
        },
      );
    }
    

    需要注意的是,使用VideoPlayer播放视频时,默认会根据视频的宽高比例来展示视频。因此,在全屏播放时,为了保持视频的原始宽高比例,我们使用了AspectRatio组件来固定视频的宽高比例。这样即可实现全屏播放,但不拉伸视频。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月13日

悬赏问题

  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 关于#c++#的问题:(2)运算二叉树·表达式一般由一个运算符和两个操作数组成:(相关搜索:二叉树遍历)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)