news 2026/8/6 17:23:17

【flutter better_player_plus实现普通播放器功能】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【flutter better_player_plus实现普通播放器功能】

引入better_player_plus: ^1.1.5

import'package:better_player_plus/better_player_plus.dart';lateBetterPlayerController_videoController;@overridevoidinitState(){// TODO: implement initStatesuper.initState();//BoxFit.contain + fullScreenByDefault=true + autoDetectFullscreenAspectRatio = true,设置后播放器播放时默认按视频的宽高比例放大填充父布局finalbetterPlayerConfiguration=BetterPlayerConfiguration(fit:BoxFit.contain,autoPlay:true,looping:true,fullScreenByDefault:true,autoDetectFullscreenAspectRatio:true,controlsConfiguration:constBetterPlayerControlsConfiguration(showControls:false,// 是否显示控制栏enableSkips:false,// 禁用快进/快退));_videoController=BetterPlayerController(betterPlayerConfiguration,betterPlayerDataSource:dataSource);_videoController.addEventsListener(_videoListener);}_videoListener(BetterPlayerEventevent)async{switch(event.betterPlayerEventType){caseBetterPlayerEventType.initialized:setState((){_isVideoInit=true;double?videoWidth=_videoController.videoPlayerController?.value.size?.width;double?videoHeight=_videoController.videoPlayerController?.value.size?.height;print('_videoWidth=$videoWidth_videoHeight=$videoHeight');if(videoWidth!=null&&videoHeight!=null){double aspectRatio=videoHeight/videoWidth;_logic.videoAspectRatio=aspectRatio;}_videoController.play();});break;caseBetterPlayerEventType.progress:Durationres=_videoController.videoPlayerController!.value.position;Duration?totalDuration=_videoController.videoPlayerController?.value.duration;if(_videoController.isPlaying()==true&&_key.currentState!=null){/// 减少build次数_key.currentState!.setPosition(position:res,totalDuration:totalDuration,);}break;caseBetterPlayerEventType.bufferingStart:_isBuffering=true;break;caseBetterPlayerEventType.bufferingEnd:_isBuffering=false;break;caseBetterPlayerEventType.exception:esLoadingToast('视频加载失败');print('视频播放器问题:${_videoController.videoPlayerController!.value.errorDescription}=====');break;default:break;}}@overridevoiddispose(){// TODO: implement dispose_videoController.removeEventsListener(_videoListener);_videoController.dispose();super.dispose();}@overrideWidgetbuild(BuildContextcontext){// TODO: implement buildreturnScaffold(backgroundColor:Colors.black,body:BetterPlayer(controller:_videoController),);}

只配置fit: BoxFit.contain时,播放时显示区域虽然按视频比例,但是不会尽可能大的充满屏幕

BoxFit.contain + fullScreenByDefault=true + autoDetectFullscreenAspectRatio = true,播放时显示区域按视频比例比例尽可能大的充满屏幕

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 15:16:11

Qwen3-4B模型推理加速:TensorRT集成Open Interpreter方案

Qwen3-4B模型推理加速:TensorRT集成Open Interpreter方案 1. Open Interpreter 简介与本地AI编程新范式 1.1 核心定位与技术背景 随着大语言模型(LLM)在代码生成领域的广泛应用,开发者对“自然语言到可执行代码”闭环的需求日益…

作者头像 李华
网站建设 2026/7/31 10:10:01

批量服务器管理中screen命令的应用探索

批量服务器管理中,如何用screen实现“断线不掉任务”的运维自由?你有没有过这样的经历:深夜执行一个数据库导出任务,命令刚跑起来,笔记本一合——第二天打开一看,进程没了。或者在高铁上通过跳板机更新一批…

作者头像 李华
网站建设 2026/7/30 23:44:05

为什么Qwen3-VL-2B部署总失败?保姆级教程入门必看

为什么Qwen3-VL-2B部署总失败?保姆级教程入门必看 1. 引言:从痛点出发,理解Qwen3-VL-2B的部署挑战 在多模态大模型快速发展的今天,Qwen3-VL-2B-Instruct 凭借其强大的视觉-语言融合能力,成为开发者和研究者关注的焦点…

作者头像 李华
网站建设 2026/8/6 13:17:11

Whisper Large v3企业部署:高可用语音识别系统架构

Whisper Large v3企业部署:高可用语音识别系统架构 1. 引言 随着全球化业务的不断扩展,企业对多语言语音识别的需求日益增长。传统语音识别系统往往局限于少数主流语言,难以满足跨国会议、客服中心、教育平台等场景下的多样化需求。为此&am…

作者头像 李华
网站建设 2026/7/31 2:47:46

Qwen3-Reranker-4B实战:快速搭建多语言文本检索系统

Qwen3-Reranker-4B实战:快速搭建多语言文本检索系统 [toc] 1. 引言 1.1 多语言文本检索的挑战与需求 在当今全球化信息环境中,跨语言、多语种的内容检索已成为企业级搜索、智能客服、知识库问答等场景的核心能力。传统检索系统往往依赖关键词匹配或单…

作者头像 李华
网站建设 2026/7/31 4:01:22

开箱即用:BGE-Reranker-v2-m3镜像一键部署与实战应用

开箱即用:BGE-Reranker-v2-m3镜像一键部署与实战应用 1. 引言:解决RAG系统“搜不准”的核心利器 在当前检索增强生成(RAG)系统的构建中,向量数据库的初步检索虽然高效,但常因语义理解不足而引入大量相关性…

作者头像 李华