当前位置: 首页 > news >正文

Flutter for OpenHarmony 音频播放萌系小指南:给 App 加上软乎乎的 “小音箱”

Flutter for OpenHarmony 音频播放萌系小指南:给 App 加上软乎乎的 “小音箱”✨
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
一、开篇:给鸿蒙 App 加上会唱歌的小音箱🎵
哈喽~这次我给 Flutter 鸿蒙 App 装上了一个软乎乎的小音箱!就像给 App 配了个会唱歌的小伙伴,点击按钮就能播放音乐,拖动进度条还能快进后退,用起来超治愈~
这次的小项目里,我搞定了这几件大事:
给鸿蒙 App 集成了just_audio音频库,适配了鸿蒙的多媒体框架
做了个粉粉的播放器 UI,有播放 / 暂停按钮和圆乎乎的进度条
处理了播放状态,加载、播放、暂停都有可爱的小提示
接下来就和我一起看看,怎么给鸿蒙 App 加上这个会唱歌的小音箱吧~
二、第一步:集成音频库,给 App 装个 “唱歌小引擎”🎶
要让 App 唱歌,首先得给它装个 “唱歌小引擎”~我选了和开源鸿蒙兼容性超棒的just_audio,它对鸿蒙的多媒体框架适配得很好,不用折腾原生代码,集成起来超省心!
一开始集成的时候,我踩了个小坑:网络音频加载不出来,像被按了静音键一样~后来才发现,是网络权限没开!给 App 加上ohos.permission.INTERNET权限后,音乐一下子就跑出来了,超惊喜~

pubspec.yaml 依赖配置 yaml dependencies:flutter:sdk:flutter just_audio:^0.9.36鸿蒙权限配置(module.json5) json{"module":{"requestPermissions":[{"name":"ohos.permission.INTERNET","reason":"加载网络音频需要联网权限哦~","usedScene":{"abilities":["EntryAbility"],"when":"inuse"}}]}}

三、第二步:粉粉的播放器 UI,软乎乎的交互🎀
光会唱歌还不够,我给播放器做了个粉粉的 UI,软乎乎的进度条和圆乎乎的按钮,用起来心情都变好了~
进度条我用了Slider组件,拖动的时候会跟着手指滑来滑去,像个软软的糖果条;播放按钮也加了状态变化,播放时会变成暂停图标,暂停时又变回播放图标,超可爱~
萌系播放器 UI 完整代码

dartimport'package:flutter/material.dart';import'package:just_audio/just_audio.dart';classCuteAudioPlayerextendsStatefulWidget{constCuteAudioPlayer({super.key});@overrideState<CuteAudioPlayer>createState()=>_CuteAudioPlayerState();}class_CuteAudioPlayerStateextendsState<CuteAudioPlayer>{finalAudioPlayer_player=AudioPlayer();bool _isLoading=true;@overridevoidinitState(){super.initState();_initAudio();}Future<void>_initAudio()async{try{// 加载示例音频await_player.setUrl('https://example.com/cute_song.mp3');setState(()=>_isLoading=false);}catch(e){setState(()=>_isLoading=false);if(mounted){ScaffoldMessenger.of(context).showSnackBar(constSnackBar(content:Text('音乐加载失败啦,再试试吧~')),);}}}@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText('软乎乎的小音箱🎵')),body:Padding(padding:constEdgeInsets.all(24.0),child:Column(mainAxisAlignment:MainAxisAlignment.center,children:[if(_isLoading)constCircularProgressIndicator(color:Colors.pink)else...[// 进度条StreamBuilder<Duration>(stream:_player.positionStream,builder:(context,snapshot){finalposition=snapshot.data??Duration.zero;finalduration=_player.duration??Duration.zero;returnColumn(children:[Slider(value:position.inSeconds.toDouble(),max:duration.inSeconds.toDouble(),activeColor:Colors.pink,onChanged:(value){_player.seek(Duration(seconds:value.toInt()));},),Row(mainAxisAlignment:MainAxisAlignment.spaceBetween,children:[Text(_formatTime(position)),Text(_formatTime(duration)),],),],);},),constSizedBox(height:30),// 播放按钮StreamBuilder<PlayerState>(stream:_player.playerStateStream,builder:(context,snapshot){finalisPlaying=snapshot.data?.playing??false;returnIconButton(iconSize:64,color:Colors.pink,icon:Icon(isPlaying?Icons.pause_circle:Icons.play_circle,),onPressed:(){if(isPlaying){_player.pause();}else{_player.play();}},);},),],],),),);}// 时间格式化String_formatTime(Durationd){finalm=d.inMinutes.remainder(60).toString().padLeft(2,'0');finals=d.inSeconds.remainder(60).toString().padLeft(2,'0');return'$m:$s';}@overridevoiddispose(){_player.dispose();super.dispose();}}

四、第三步:处理播放状态,让小音箱乖乖听话💡
为了让小音箱更贴心,我还处理了播放状态~加载音乐时会显示粉粉的加载圈,网络不好时会弹出温柔的提示,播放完成后会自动回到暂停状态,像个会照顾人的小管家~
在鸿蒙真机上跑的时候,状态切换超丝滑,播放、暂停、拖动进度条都没有卡顿,粉粉的进度条跟着音乐节奏滑来滑去,看着超治愈~
五、真机体验:小音箱在鸿蒙设备上唱歌啦🎉
我把这个软乎乎的小音箱装到鸿蒙真机上试了试,效果超棒:
网络音乐加载很快,进度条会跟着音乐慢慢滑
点击播放按钮,音乐就会温柔地响起来,暂停按钮会乖乖切换
拖动进度条,音乐就会跳到对应的位置,超听话
就算把 App 退到后台,音乐也会继续播放,像个随身小音箱~
这是我的运行截图:

六、复盘小技巧:让小音箱在鸿蒙上更乖💡
折腾下来,我也总结了几个让音频播放变乖的小技巧:
记得开网络权限,不然网络音乐加载不出来哦
进度条用Slider就很适配,粉粉的颜色超可爱
网络不好的时候加个温柔的提示,用户体验会更好
真机测试比模拟器靠谱,后台播放效果只有真机才看得出来~
七、结尾:会唱歌的小音箱谁不爱呀~
这次给鸿蒙 App 装上的软乎乎小音箱,不仅实用还超可爱!看着粉粉的进度条和会切换的按钮,听着温柔的音乐,用起来心情都变好了~

http://www.jsqmd.com/news/698488/

相关文章:

  • 别再只用SIFT了!手把手教你用Colmap的RootSIFT和自定义特征提升三维重建精度
  • 别再死记硬背了!用PowerDesigner/MySQL Workbench实战ER图转关系模式(附完整SQL脚本)
  • 亲测好用敏感肌使用不过敏防晒霜推荐,Leeyo防晒霜敏感肌防水不致敏不泛白 - 全网最美
  • 2026年银川环保电缆与特种工况电缆供应商深度选型指南 - 企业名录优选推荐
  • OpenPLC Editor:开源工业自动化开发的终极解决方案
  • 告别手动解析!用Python+Tree-sitter快速提取代码语法树(附多语言实战)
  • 3步搞定AMD显卡AI绘画模型训练:kohya_ss终极指南
  • 2026年4月江诗丹顿官方售后网点核验横评与客观解析(含迁址新开) - 亨得利官方服务中心
  • 【兆易创新GD32H759I-EVAL开发板】TLI图层混合与动态UI设计实战指南
  • 有没有能抗光老紧致肌肤的防晒霜?Leeyo抵御光损紧致嫩肤抗老化 - 全网最美
  • Spyder 6.0:重新定义Python科学计算开发体验的技术架构演进
  • 2026年银川环保电缆与特种工况控制电缆采购指南:汇达线缆深度横评 - 企业名录优选推荐
  • STM32H743 FDCAN双通道配置实战:从引脚分配到中断处理的完整流程(含代码)
  • Windows虚拟显示器驱动:为你的PC扩展无限屏幕空间的技术指南
  • BetterNCM安装器:3分钟完成网易云音乐插件框架的终极安装指南
  • LightGlue:自适应剪枝如何重塑深度特征匹配的性能边界
  • 2026年银川环保电缆与控制电缆供应商深度横评:低烟无卤、特种工况一站式解决方案对比指南 - 企业名录优选推荐
  • LunaTranslator:让视觉小说语言壁垒彻底消失的神奇工具
  • 海南洪鑫再生资源回收:海南不锈钢回收电话多少 - LYL仔仔
  • B站M4S转MP4终极指南:三分钟学会视频备份完整方案
  • Proxmox Mail Gateway保姆级安装避坑指南:从换阿里云源到关闭订阅提示
  • Dusun DSGW-130智能家居控制器硬件解析与应用指南
  • IS-IS协议里的“身份证”:一文搞懂NSAP和NET地址的结构与区别(含TLV扩展机制解析)
  • 从模型到决策:农林领域核心模型实战指南与论文写作融合
  • 品冠装饰设计:黄埔口碑好的室内装修公司怎么联系 - LYL仔仔
  • PyMICAPS:气象工作者的终极Python可视化解决方案
  • 探讨2026年实力强的变压器公司,祥控电力排名如何? - 工业品牌热点
  • 杰理之配对名修改是修改ble 配对名【篇】
  • 如何在5分钟内快速上手Ryujinx:免费Switch模拟器终极使用指南
  • 2026年黑龙江、吉林、内蒙实力强的变压器公司排名,靠谱企业全解析 - myqiye