Flutter:视频全屏切换
我会分享一些在网上找不到,或者遇到问题并解决的事情。
最近在调研Flutter视频播放,在横屏切换到竖屏的时候遇到了点问题。代码如下:
class PortraitPage extends StatefulWidget {const PortraitPage({Key? key}) : super(key: key);@override_PortraitPageState createState() => _PortraitPageState();
}class _PortraitPageState extends State<PortraitPage> {VideoPlayerController? controller;@overridevoid initState() {super.initState();controller = VideoPlayerController.network("https://cdn-resource.ekwing.com/acpf/data/upload/expand/2017/08/29/59a53da773e00.mp4")..setLooping(true)..initialize().then((_) {controller!.play();});}@overridevoid dispose() {controller!.dispose();super.dispose();}@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(body: Column(children: [AspectRatio(aspectRatio: controller!.value.aspectRatio,child: VideoPlayer(controller!),),MaterialButton(onPressed: () {Navigator.push(context,MaterialPageRoute(builder: (context) => VideoFullPage(controller: controller!)));},child: Text("切换全屏"))],),),);}
}class VideoFullPage extends StatefulWidget {final VideoPlayerController controller;const VideoFullPage({Key? key, required this.controller}) : super(key: key);@override_VideoFullPageState createState() => _VideoFullPageState();
}class _VideoFullPageState extends State<VideoFullPage> {@overridevoid initState() {super.initState();SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,]);}@overridevoid dispose() {///页面退出时,切换为竖屏SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);super.dispose();}@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(backgroundColor: Colors.black,body: Stack(children: [Center(child: AspectRatio(aspectRatio: widget.controller.value.aspectRatio,child: VideoPlayer(widget.controller),),),Padding(padding: const EdgeInsets.only(top: 25, right: 20),child: IconButton(icon: const Icon(Icons.arrow_back_ios),color: Colors.white,onPressed: () {///点击返回,先切换竖屏,然后退出页面SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);Navigator.pop(context);},),)],),),);}
}
从竖屏切换到全屏没有问题,点击物理按键:Back
,会出现先退出了页面,然后再切换到竖屏。体验效果不是很好,所以修改方案:
- 拦截返回按键。
- 先切换为竖屏,然后Navigator.pop(context)。
class _VideoFullPageState extends State<VideoFullPage> {@overridevoid initState() {super.initState();SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,]);}@overrideWidget build(BuildContext context) {return WillPopScope(child: MaterialApp(home: Scaffold(backgroundColor: Colors.black,body: Stack(children: [Center(child: Hero(tag: "player",child: AspectRatio(aspectRatio: widget.controller.value.aspectRatio,child: VideoPlayer(widget.controller),),),),Padding(padding: const EdgeInsets.only(top: 25, right: 20),child: IconButton(icon: const Icon(Icons.arrow_back_ios),color: Colors.white,onPressed: () {SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);Navigator.pop(context);},),)],),),),onWillPop: () async {SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]);Navigator.pop(context);return false;});}
}
完整代码见GitHub
Flutter:视频全屏切换相关推荐
- 视频全屏非全屏切换,状态栏动态显示隐藏兼容性解决
列表中视频全屏/非全屏切换时,需要动态显示/隐藏状态栏 View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐 ...
- html5仿抖音全屏播放,仿抖音视频全屏播放滑动切换
1 前言 随着移动技术的快速迭代,数据流量费用的快速下降,视频.直播正成为全民的媒体盛宴,我司必然也不会缺席此次盛宴,这里讲述的是通过h5实现仿抖音视频全屏播放&滑动切换的效果,供我司直播鉴定 ...
- dplayer js控制 自动全屏_vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】...
最近公司的产品上线,一些高级功能在基础版本中不对用户开发,通过视频的形式展示. 产品开发用的是 vue, 经同事介绍使用了vue-video-player视频播放插件,通过 demo案例很快实现了视频 ...
- PPAPI插件的全屏切换处理
有时你会想让PPAPI插件全屏(比如播放视频时),这次来看看怎么做. PPAPI和CEF App两侧都要处理. foruok原创,转载请注明出处.欢迎关注foruok的订阅号"程序视界&qu ...
- android播放器竖屏,Android 巧用DecorView实现列表或详情视频播放器竖屏及全屏切换...
在平时开发过程中,如果使用到视频播放器的功能,那就一定会涉及到全屏切换的操作 以往常规操作基本如下 设置全屏播放步骤 1.横屏 2.视频播放器尺寸调整 3.隐藏其他多余控件 恢复小屏播放 1.竖屏 2 ...
- 远程桌面退出全屏/不能全屏/全屏切换的技巧
远程桌面退出全屏/不能全屏/全屏切换的技巧退出全屏 问:我的电脑远程登录到服务器上并且切换到了全屏状态,全屏后发现桌面顶部没有浮动工具栏了,想退出全屏状态,不知如何退出了,最后,只有重启电脑.想知道如 ...
- VirtualBox全屏切换
用VirtualBox的时候,如果设置为全屏,想再切换回来,没有什么菜单,只有通过键盘的快捷键来操作,才可以恢复. 我常常忘掉,所以老是得去找,以后需要记住这几个按键的快捷键. 1.全屏与非全屏切换: ...
- 页面平滑过渡全屏切换
实现效果为页面平滑过渡全屏切换,点击导航和鼠标滚动都可以切换. 效果图: 代码: <!DOCTYPE html> <html> <head lang="en&q ...
- 安卓微信下video退出视频全屏方法
安卓微信下video退出视频全屏方法 在做h5项目的时候,安卓video全屏模式退出方案: <script>var video = document.getElementById('vid ...
- 1.视频全屏展示(适应各种屏幕尺寸)
视频全屏展示(适应各种屏幕尺寸) 大概效果 方法一(不兼容所有IE) object-fit:fill; <div class="banner"><videosrc ...
最新文章
- LeetCode Binary Tree Right Side View(搜索)
- yaml 文件格式简介
- 【PAT甲级 素数判断 进制转换】1015 Reversible Primes (20 分) Java版 4/4通过
- 大一的时候我上铺一哥们天天说梦话,一夜,他羞涩的说:“我怀孕了。”我们全体晕倒。...
- 垃圾回收算法以及垃圾回收器_什么是垃圾回收?
- 建立你第一个 Outlook Add-in
- Gemini创始人:如果我是GameStop CEO 接下来我会买BTC
- Eclipse或MyEclipse—在Eclipse或MyEclipse中的操作(1)
- protect 继承_【private,public,protect三种继承方式的区别】
- 知识分享!什么是中继器?-道合顺大数据Infinigo
- 2018 蓝桥杯省赛 A 组模拟赛(一) 青出于蓝胜于蓝
- RK3288 开发板 排插物理引脚对应图以及如何进入android6.0.1内核终端、uboot终端
- 什么是虚拟主播?虚拟数字人直播,不用出镜,不用露脸的直播方式
- 上位机与1200组态步骤_西门子1200PLC的S7通讯组态编程
- python 椭圆曲线_椭圆曲线double和add在python中的实现
- 随机生成11位激活码
- DAY5:《鸟叔的linux私房菜》
- 怡丰机器人上市_成立三年之内 机器人领域的这些黑马公司不可不知
- 微软近日更新网页版Skype增通知版面和关键词搜寻
- win10或win7计算机右键管理打不开