用flutter跨平台音乐软件,AI帮我完成了95%的代码量

19 阅读4分钟

Flutter跨平台音乐播放器开发实战分享

基于「胖虎音乐」项目的开发历程与AI协作经验

1. 项目概览

「胖虎音乐」 是基于Flutter开发的本地音乐播放器,支持Windows、Android双平台,主打本地音乐、纯净无广告。

开源地址:码云Gitee仓库

下载地址:安卓App 该地址无法开源了,还是请本地打包体验吧

截图预览

灵动岛

适配灵动岛、媒体播放中心,可后台播放,便于切歌

image.png

长按图标

长按图标可以自定义一些基础功能

image.png

基础列表、歌词

扫描本地歌曲、自动解析歌词、封面等 image.png

功能设置

可以设置主题色、左上角名称,可以修改桌面的App图标、听歌统计、检查更新等功能;

image.png

windows端

windows端和Android端很多都可以复用,只是扫描歌曲和解析的方法不一样;

windows端特殊做了系统托盘功能;

image.png

核心功能

  • 本地音乐扫描与管理(两阶段扫描优化)
  • 音频播放控制(播放/暂停/切歌/循环模式)
  • 歌词显示与实时定位(自动匹配同名.lrc文件)
  • 专辑封面提取与默认封面生成
  • 播放列表、收藏管理、搜索筛选
  • 主题色配置(8种预设,全局动态切换)
  • 应用图标更换(Android端支持)
  • 版本管理与在线更新(Gitee Releases API)
  • 听歌统计与系统托盘(Windows)
  • dev-在线搜索歌词【开发中...】

技术栈

  • Flutter 3.x + Dart
  • 音频库:just_audio(Android)+ audioplayers(Windows)
  • 状态管理:Provider
  • 本地存储:path_provider + shared_preferences
  • 动态主题:ColorScheme.fromSeed(Material 3)

项目结构

lib/
├── services/       # 音频处理、扫描、主题、更新等服务
├── utils/          # 元数据提取、GBK解码、图标生成等工具
├── widgets/        # 音乐列表、播放控制组件
├── screens/        # 主页、收藏、歌词、设置等页面
├── models/         # 数据模型
├── providers/      # 状态管理
└── main.dart

2. 核心技术实现

2.1 跨平台音频播放

针对 just_audio_windows 的线程安全问题,采用平台特定实现:

  • Android:使用 just_audio
  • Windows:使用 audioplayers(miniaudio,体积仅200KB)

2.2 两阶段扫描优化

  • 第一阶段:快速提取基本信息(歌名、歌手、时长),跳过封面
  • 第二阶段:后台批量提取封面(每批3首)
  • 效果:扫描速度提升约60%

2.3 Material 3 动态主题

基于 ColorScheme.fromSeed 实现全局主题切换:

  • 8种预设主题色
  • 自动适配亮色/暗色模式
  • 主题选择持久化存储

2.4 Android应用图标切换

利用 activity-alias 机制实现运行时图标切换:

  • AndroidManifest定义4个activity-alias
  • 通过MethodChannel调用原生代码启用/禁用别名
  • 默认封面跟随当前图标更新

3. 关键挑战与解决方案

挑战根因解决方案
Windows音频播放异常just_audio_windows 线程安全bug切换到 audioplayers,创建平台特定实现
MP3中文标签乱码ID3v2标签实际使用GBK编码Windows用FFI调用系统API,Android用charset_converter
封面解析失败ID3v2标签大小字段异常增强解析逻辑,添加暴力搜索APIC帧回退策略
包体积过大media_kit 依赖libmpv(14.81MB)切换到 audioplayers,节省约13.4MB
通知栏/灵动岛不显示自定义MediaControl格式错误只保留标准控件,使用应用图标作为通知图标
版本更新检测失败INTERNET权限缺失、版本号解析错误添加权限声明,优化版本号解析逻辑

4. 跨平台体验对比

功能WindowsAndroid备注
音乐扫描/播放统一实现
封面提取/歌词统一实现
主题色配置Material 3
应用图标切换activity-alias
系统托盘tray_manager
灵动岛/通知audio_service
版本更新区分EXE/APK

5. 开发效率对比

对比项传统原生开发Flutter跨平台
代码量~6000行~5730行(共享70%)
开发时间~120小时~60小时(-50%)
维护成本双代码库统一代码库

6. AI协作价值

  • 问题诊断:快速定位 just_audio_windows 线程安全问题、ID3v2标签异常等
  • 架构设计:设计跨平台统一接口、平台特定实现隔离方案
  • 性能优化:指导从 media_kit 切换到 audioplayers、两阶段扫描策略
  • 边缘处理:非规范MP3文件兼容、多编码格式自动检测

7. 技术亮点总结

  1. 跨平台统一:一套代码支持双平台,平台特定功能通过条件编译隔离
  2. 性能优化:两阶段扫描、轻量级音频库选择
  3. 用户体验:Material 3动态主题、平台特定功能(系统托盘/灵动岛)
  4. 版本管理:基于Gitee Releases API,区分APK/EXE自动下载

结语:Flutter跨平台开发显著提升效率,结合AI辅助能更快速解决技术挑战,为多平台应用提供统一体验。