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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Windows手动编译openssl和直接安装openssl

零、环境 win10-64位 VS2019 一、手动编译 前言&#xff1a;对于一般的开发人员而言&#xff0c;在 openssl 上下载已经编译好的 openssl 库&#xff0c;然后直接拿去用即可&#xff0c;&#xff0c;不用手动编译&#xff0c;{见下文直接安装}。。。对于一些开发人员&#…

从c++的角度来看ffmpeg 的架构

------------------------------------------------------------------------- author: hjjdebug date: 2023年 08月 01日 星期二 11:26:40 CST descriptor: 从c的角度来看ffmpeg 的架构 ------------------------------------------------------------------------…

maxwell 基于zookeeper的高可用方案

Maxwell版本1.39.2 一&#xff1a; 添加zk的pox文件 <!-- customize HA --> <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>5.4.0</version> </dependency>&…

查看gz文件 linux zcat file.gz mtx.gz

可以使用以下命令来查看 gz 压缩文件的内容&#xff1a; zcat file.gz 1 该命令会将 file.gz 文件解压并输出到标准输出&#xff0c;可以通过管道符将其与 grep 命令结合使用来查找需要的关键词&#xff0c;例如&#xff1a; zcat file.gz | grep keyword 1 该命令会将 file.gz…

Electron 开发,报handshake failed; returned -1, SSL error code 1,错误

代码说明 在preload.js代码中&#xff0c;暴露参数给渲染线程renderer.js访问&#xff0c; renderer.js 报&#xff1a;ERROR:ssl_client_socket_impl.cc(978)] failed; returned -1, SSL error code 1,错误 问题原因 如题所说&#xff0c;跨进程传递消息&#xff0c;这意味…

Rust 开发环境搭建【一】

Rust 开发环境 推荐 搭建&#xff1a; 安装 rust 语言 以及 工具链 推荐安装方法&#xff1a;rustup curl --proto ‘https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh 在国内如果访问速度慢&#xff0c;可以使用清华大学提供的镜像服务&#xff1a; https://mirrors.tu…

Python中实现多个列表、字典、元组、集合的连接

目录 目录 前言 一、列表 1、运算符 2、extend&#xff08;&#xff09;方法 3、解包操作 * 二、字典 1、update&#xff08;&#xff09;方法 2、解包操作 ** 三、元组 1、 运算符 2、解包操作 * 四、集合 1、union方法 2、| 运算符 3、解包操作 * 五、不同类…

Python 多线程

Python 多线程 多线程类似于同时执行多个不同程序&#xff0c;多线程运行有如下优点&#xff1a; 使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人&#xff0c;这样比如用户点击了一个按钮去触发某些事件的处理&#xff0c;可以弹出一个进度条…

学习单片机的秘诀:实践与坚持

在学习单片机时&#xff0c;将实践与学习结合起来是一个很好的方法。不要一上来就死磕指令和名词&#xff0c;而是边学边做实验&#xff0c;循序渐进地理解和应用指令。通过实验&#xff0c;你能亲身感受到指令的控制效果&#xff0c;增强对单片机的理解和兴趣。 学习单片机不…

Android Ble蓝牙App(二)连接与发现服务

Ble蓝牙App&#xff08;二&#xff09;连接与发现服务 前言正文一、GATT回调二、连接和断连三、连接状态回调四、发现服务五、服务适配器六、显示服务七、源码 前言 在上一篇中我们进行扫描设备的处理&#xff0c;本文中进行连接和发现服务的数据处理&#xff0c;运行效果图如下…

Electron 工具进程utilityProcess 使用中遇到的坑点汇集

简介 这是基于 node.js 中的子进程的概念推出来的&#xff0c;可参考链接&#xff1a;utilityProcess | Electron 官网有一句话非常重要&#xff0c;它提供一个相当于 Node.js 的 child_process.fork API&#xff0c;但使用 Chromium 的 Services API 代替来执行子进程。这句话…

AI量化模型预测——baseline学习笔记

一、赛题理解 1. 赛题名称 AI量化模型预测 2. 赛题理解 本赛事是一个量化金融挑战&#xff0c;旨在通过大数据与机器学习的方法&#xff0c;使用给定的训练集和测试集数据&#xff0c;预测未来中间价的移动方向。参赛者需要理解市场行为的原理&#xff0c;创建量化策略&#…

element表格+表单+表单验证结合u

一、结果展示 1、图片 2、描述 table中放form表单&#xff0c;放输入框或下拉框或多选框等&#xff1b; 点击添加按钮&#xff0c;首先验证表单&#xff0c;如果存在没填的就验证提醒&#xff0c;都填了就向下添加一行表单表格&#xff1b; 点击当前行删除按钮&#xff0c;…

剑指Offer05.替换空格

剑指Offer05.替换空格 目录 剑指Offer05.替换空格题目描述解法一&#xff1a;遍历添加解法二&#xff1a;原地修改 题目描述 请实现一个函数&#xff0c;把字符串s中的每个空格都替换成“%20”。 解法一&#xff1a;遍历添加 由于每次替换都要把一个空格字符变成三个字符&a…

Godot 4 源码分析 - 碰撞

碰撞功能应该是一个核心功能&#xff0c;它能自动产生相应的数据&#xff0c;比如目标对象进入、离开本对象的检测区域。 基于属性设置&#xff0c;能碰撞的都具备这样的属性&#xff1a;Layer、Mask. 在Godot 4中&#xff0c;Collision属性中的Layer和Mask属性是用于定义碰撞…

Unity 编辑器选择器工具类Selection 常用函数和用法

Unity 编辑器选择器工具类Selection 常用函数和用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;Selection类是一个非常有用的工具类&#xff0c;它提供了许多函数和属性&#xff0c;用于操作和管理编辑器中的选择对象。本文将介绍Selection类的常用函数和用法&#xff…

Redis-Java客户端-Jedis

目录 01.导入依赖 02.进行测试连接 03.使用JedisPool 04.修改测试的代码 01.导入依赖 新建一个mevan工程&#xff0c;在pom文件下导入相应的依赖&#xff0c;相依的依赖可以去官网查找 spring官网&#xff1a;Spring Data Redis <dependencies><!-- jedis -->…

伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统安卓+IOS前端纯原生源码

伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统安卓IOS前端纯原生源码&#xff0c; 后端是java源码。

2.4 网络安全新技术

数据参考&#xff1a;CISP官方 目录 云计算安全大数据安全移动互联网安全物联网安全工业互联网安全 一、云计算安全 1、云计算定义 云计算是指通过网络访问可扩展的、灵活的物理或虚拟共享资源池&#xff0c;并按需自助获取和管理资源的模式。在云计算中&#xff0c;计算资…

深度学习之双线性插值

1、单线性插值 单线性插值是一种用于估计两个已知数据点之间未知点的方法。它基于线性关系&#xff0c;通过计算目标位置的值&#xff0c;使用已知点之间的线性函数进行插值。这在图像处理中常用于放缩、旋转等操作&#xff0c;计算简单&#xff0c;产生平滑结果&#xff0c;但…