Flutter video_player点击重新播放

这篇具有很好参考价值的文章主要介绍了Flutter video_player点击重新播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视频播放完成之后,暂停视频,点击重新播放

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';

class ListViewItemWidget extends StatefulWidget{

  
  State createState() {
    return _ListViewItemWidgetState();
  }
}

class _ListViewItemWidgetState extends State<ListViewItemWidget>{

  bool isPlay = false;
  bool isOver = false;
  late VideoPlayerController _controller;

  
  void initState() {
    _controller =  VideoPlayerController.network('https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_20mb.mp4')
        ..initialize().then((_){
          _controller.play();
          setState(() {
            _controller.pause();
          });
        })
        ..addListener(videoListener);
  }

  
  void dispose() {
    _controller.dispose();
    _controller.removeListener(videoListener);
    super.dispose();
  }

  void videoListener(){
    var curPlayPosition = _controller.value.position;
    var totalPlayTime = _controller.value.duration;
    if (curPlayPosition == totalPlayTime && curPlayPosition.toString() != "0:00:00.000000"){
      isOver = true;
      isPlay = false;
      _controller.initialize()
        ..then((_) {
          setState(() {

          });
        });

      setState(() {

      });
    }
  }

  
  Widget build(BuildContext context) {
    return Column(
      children: [
        //未关注的才会显示为你推荐
        Row(
          children: [
            Container(
              width: MediaQuery.of(context).size.width - 50,
              height: 50,
              alignment: Alignment.centerLeft,
              padding: const EdgeInsets.only(left: 12.0),
              child: Text("为你推荐"),
            ),
            SizedBox(
              width: 50,
              height: 50,
              child: InkWell(
                child: Icon(Icons.close),
                onTap: (){
                  /**
                   * 关闭
                   */
                },
              ),
            )
          ],
        ),

        Stack(
          children: [
            Container(
              height: 220,
              color: Colors.blueGrey,
              margin: EdgeInsets.only(top: 10),
              child: Stack(
                children: [
                  Positioned.fill(child: GestureDetector(
                      child: AspectRatio(
                        child: VideoPlayer(_controller),
                        aspectRatio: _controller.value.aspectRatio,
                      )),
                  ),
                  Container(
                    height: 40,
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: [
                        /**
                         * 网络图片
                         */
                        // Image(image: Image.network(""))
                        Expanded(
                            flex: 1,
                            child:Icon(Icons.verified_user, color: Colors.white)
                        ),
                        Expanded(
                          flex: 6,
                          child:Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text("userName", style: TextStyle(fontSize: 18, color: Colors.white),),
                              Text("userName", style: TextStyle(fontSize: 12, color: Colors.white),)
                            ],
                          ),
                        ),
                        Expanded(
                            flex: 1,
                            child: Text("关注",  style: TextStyle(fontSize: 12, color: Colors.white))
                        ),
                        Expanded(
                            flex: 1,
                            child:   Icon(Icons.menu, color: Colors.white)
                        )
                      ],
                    ),
                  ),
                  buildControllerWidget()
                ],
              ),

            ),
          ],
        ),

        Container(
          margin: EdgeInsets.only(top: 10),
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              /**
               * 网络图片
               */
              // Image(image: Image.network(""))

              Expanded(
                  flex: 1,
                  child:Icon(Icons.favorite_border)
              ),
              Expanded(
                  flex: 1,
                  child:Icon(Icons.messenger_outline)
              ),
              Expanded(
                  flex: 1,
                  child:Icon(Icons.share_outlined)
              ),
              Expanded(
                flex: 4,
                child:Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                  ],
                ),
              ),
              Expanded(
                  flex: 1,
                  child:   Icon(Icons.collections_outlined)
              )
            ],
          ),
        ),
        Container(
          alignment: Alignment.centerLeft,
          padding: EdgeInsets.only(left: 18,top: 20),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text("1732赞"),
              Text("hahhahah"),
              Text("总共23条评论"),
              Text("6天前")
            ],
          ),
        )
      ],
    );
  }

  //播放界面
  Widget buildControllerWidget(){
    if(isPlay){
      return Container(
        child: GestureDetector(
          onTap: (){
            _controller.pause();
            isPlay = false;
            setState(() {
            });
          },
        ),
      );
    }
    return  Positioned.fill(child: AspectRatio(
        aspectRatio: _controller.value.aspectRatio,
        child: Container(
          child: GestureDetector(
            onTap: (){
              if(isOver){
                isOver = false;
                _controller.play();
                isPlay = true;
                setState(() {
                });
              } else {
                _controller.play();
                isPlay = true;
                setState(() {
                });
              }
            },
            child: Icon(Icons.play_circle_fill, size: 44,),
          ),
        )),
    );
  }
}



pubspec.yaml依赖

  video_player: ^2.3.0

要求Android compileSdkVersion 为33文章来源地址https://www.toymoban.com/news/detail-630894.html

到了这里,关于Flutter video_player点击重新播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包