{"id":50421168,"url":"https://github.com/songloft-org/songloft-player","last_synced_at":"2026-06-07T11:01:46.198Z","repository":{"id":346781566,"uuid":"1187783230","full_name":"songloft-org/songloft-player","owner":"songloft-org","description":"🎵 Songloft 跨平台音乐播放器 — 基于 Flutter 构建","archived":false,"fork":false,"pushed_at":"2026-05-31T07:51:47.000Z","size":15715,"stargazers_count":70,"open_issues_count":2,"forks_count":16,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-31T08:19:19.383Z","etag":null,"topics":["apk","app","dart","flutter","ipa","loft","mimusic","music","song","songloft","xiaomusic"],"latest_commit_sha":null,"homepage":"https://songloft.hanxi.cc/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/songloft-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-21T06:41:35.000Z","updated_at":"2026-05-31T07:46:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/songloft-org/songloft-player","commit_stats":null,"previous_names":["mimusic-org/frontend","mimusic-org/mimusic-player","songloft-org/songloft-player"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/songloft-org/songloft-player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songloft-org%2Fsongloft-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songloft-org%2Fsongloft-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songloft-org%2Fsongloft-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songloft-org%2Fsongloft-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/songloft-org","download_url":"https://codeload.github.com/songloft-org/songloft-player/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/songloft-org%2Fsongloft-player/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33850627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apk","app","dart","flutter","ipa","loft","mimusic","music","song","songloft","xiaomusic"],"created_at":"2026-05-31T08:03:20.514Z","updated_at":"2026-06-03T06:00:45.341Z","avatar_url":"https://github.com/songloft-org.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Songloft Flutter\n\n[![Build and Release](https://github.com/songloft-org/songloft-player/actions/workflows/build-and-release.yml/badge.svg)](https://github.com/songloft-org/songloft-player/actions/workflows/build-and-release.yml)\n[![GitHub License](https://img.shields.io/github/license/songloft-org/songloft-player)](https://github.com/songloft-org/songloft-player)\n[![GitHub Release](https://img.shields.io/github/v/release/songloft-org/songloft-player)](https://github.com/songloft-org/songloft-player/releases)\n[![Stars](https://img.shields.io/github/stars/songloft-org/songloft-player)](https://github.com/songloft-org/songloft-player/stargazers)\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003e🎵 Songloft 跨平台音乐播放器 — 基于 Flutter 构建\u003c/strong\u003e\n\u003c/p\u003e\n\nSongloft 跨平台音乐播放器，基于 Flutter 构建，支持 iOS、Android、macOS、Windows、Linux、Web 六端。\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/songloft-org/songloft-player\"\u003e🏠 GitHub\u003c/a\u003e •\n  \u003ca href=\"https://github.com/songloft-org/songloft-player/releases\"\u003e📥 下载\u003c/a\u003e •\n  \u003ca href=\"https://github.com/songloft-org/songloft-player/issues\"\u003e💬 问题反馈\u003c/a\u003e\n\u003c/p\u003e\n\n## 截图\n\nhttps://github.com/songloft-org/songloft/issues/6\n\n## 下载安装\n\n从 [GitHub Releases](https://github.com/songloft-org/songloft-player/releases/latest) 下载最新版本：\n\n| 平台 | 下载链接 | 说明 |\n|------|----------|------|\n| 🌐 **Web (standalone)** | [songloft-web-standalone.tar.gz](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-web-standalone.tar.gz) | 独立部署版，支持配置后端地址 |\n| 🌐 **Web (embedded)** | [songloft-web-embedded.tar.gz](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-web-embedded.tar.gz) | 嵌入 Go 后端同域部署 |\n| 🐧 **Linux** | [songloft-linux-x64.tar.gz](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-linux-x64.tar.gz) | x64 桌面版 |\n| | [songloft-linux-x64.deb](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-linux-x64.deb) | Debian/Ubuntu x64 |\n| | [songloft-linux-x64.rpm](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-linux-x64.rpm) | Fedora/RHEL/CentOS x64 |\n| | [songloft-linux-x64.AppImage](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-linux-x64.AppImage) | 免安装可执行文件 |\n| 🪟 **Windows** | [songloft-windows-x64.zip](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-windows-x64.zip) | x64 便携版 |\n| | [songloft-windows-x64.msix](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-windows-x64.msix) | x64 安装版 |\n| 🍎 **macOS** | [songloft-macos.dmg](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-macos.dmg) | Universal DMG (Intel/Apple Silicon) |\n| | [songloft-macos.zip](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-macos.zip) | Universal App 压缩包 |\n| 🤖 **Android** | [songloft-arm64-v8a.apk](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-arm64-v8a.apk) | ARM64 设备（推荐） |\n| | [songloft-armeabi-v7a.apk](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-armeabi-v7a.apk) | ARMv7 设备 |\n| | [songloft-x86_64.apk](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-x86_64.apk) | x86_64 模拟器/设备 |\n| 📱 **iOS** | [songloft-ios-nosign.ipa](https://github.com/songloft-org/songloft-player/releases/latest/download/songloft-ios-nosign.ipa) | 未签名 IPA，可通过 AltStore/Sideloadly 安装 |\n\n\u003e 开发版可在 [main 分支 Release](https://github.com/songloft-org/songloft-player/releases/tag/main) 获取。\n\n## 功能特性\n\n- **跨平台支持**: iOS、Android（手机/平板/TV）、macOS、Windows、Linux、Web\n- **响应式布局**: 4 级断点自适应（Mobile \u003c 600px, Tablet 600-900px, Desktop 900-1920px, TV 1920px+）\n- **自适应导航**: 手机底栏、平板侧栏、桌面侧边菜单、TV 顶部 Tab\n- **音乐播放**: 基于 just_audio，支持本地和网络歌曲，后台播放\n- **歌单管理**: 创建、编辑、删除歌单，添加/移除歌曲\n- **歌曲库**: 分页加载、搜索过滤、歌曲编辑\n- **主题切换**: 亮色/暗色/跟随系统\n- **JWT 认证**: 双 Token 机制，安全存储（自动降级）\n- **TV 适配**: D-Pad 焦点导航，大按钮/大字体\n\n## 环境要求\n\n- Flutter \u003e= 3.29.0\n- Dart SDK \u003e= 3.7.0\n\n## 快速开始\n\n```bash\n# 安装依赖\nflutter pub get\n\n# 运行（自动选择已连接设备）\nflutter run\n\n# 指定平台运行\nflutter run -d chrome --no-web-resources-cdn  # Web（standalone 模式）\nflutter run -d macos                          # macOS\nflutter run -d \"iPhone 16 Pro\"                # iOS 模拟器\nflutter run -d \u003cdevice-id\u003e                    # Android 设备\n```\n\n## 构建\n\n```bash\n# 各平台构建\nflutter build web --no-web-resources-cdn                                       # Web (standalone)\nflutter build web --no-web-resources-cdn --dart-define=DEPLOY_MODE=embedded    # Web (嵌入模式)\nflutter build apk --split-per-abi                                              # Android APK\nflutter build ios --no-codesign                                                # iOS\nflutter build macos                                                            # macOS\nflutter build linux                                                            # Linux\nflutter build windows                                                          # Windows\n\n# 使用构建脚本（支持并行构建所有平台）\n./scripts/build-frontend.sh web           # 构建单个平台\n./scripts/build-frontend.sh all           # 构建所有平台\n```\n\n详细构建说明参见 [BUILD_FRONTEND_GUIDE.md](BUILD_FRONTEND_GUIDE.md)。\n\n## CI/CD\n\n本仓库通过 GitHub Actions 自动构建和发布：\n\n- **推送 `v*` tag** → 自动构建所有平台并创建正式 Release\n- **手动触发** → 构建并发布到分支名对应的 Release（如 `main`）\n\n工作流文件：[`.github/workflows/build-and-release.yml`](.github/workflows/build-and-release.yml)\n\n## 项目结构\n\n```\nlib/\n├── config/          # 应用配置（API 地址、常量）\n├── core/            # 核心层\n│   ├── audio/       # 音频播放服务\n│   ├── network/     # HTTP 客户端、认证拦截器\n│   ├── router/      # GoRouter 路由配置\n│   ├── storage/     # 本地存储、安全存储\n│   ├── theme/       # 主题、响应式断点\n│   └── utils/       # 工具函数\n├── features/        # 功能模块\n│   ├── auth/        # 认证（登录/登出/Token 管理）\n│   ├── home/        # 首页\n│   ├── library/     # 歌曲库\n│   ├── player/      # 播放器（桌面/移动/TV/迷你）\n│   ├── playlist/    # 歌单管理\n│   └── settings/    # 设置（主题/扫描/插件/升级）\n├── shared/          # 共享层\n│   ├── layouts/     # 自适应布局（AdaptiveScaffold、ShellLayout）\n│   ├── models/      # 数据模型（Song、Playlist）\n│   └── widgets/     # 通用组件\n├── main.dart        # 应用入口\nscripts/\n├── build-frontend.sh         # 多平台构建脚本\n├── release-frontend.sh       # 版本发布脚本（语义化版本控制）\n└── docker-build-frontend.sh  # Docker 构建便捷脚本\n```\n\n## 技术栈\n\n| 类别 | 技术 |\n|------|------|\n| 状态管理 | Riverpod |\n| 路由 | GoRouter |\n| HTTP | Dio + JWT 拦截器 |\n| 音频 | just_audio + audio_service |\n| 本地存储 | SharedPreferences + FlutterSecureStorage |\n| 图片缓存 | CachedNetworkImage |\n\n## 部署模式\n\n| 模式 | 说明 |\n|------|------|\n| **standalone** | 前后端分离部署，显示 API 地址配置 UI，用户手动填写后端地址 |\n| **embedded** | 嵌入 Go 后端同域部署，自动使用当前域名，隐藏 API 地址 UI |\n\n默认构建（不传 `--dart-define`）等同于 standalone 模式。\n\n## 版本发布\n\n使用 `release-frontend.sh` 脚本进行版本发布（遵循语义化版本控制）：\n\n```bash\n# 补丁版本升级（1.0.0 -\u003e 1.0.1）\n./scripts/release-frontend.sh patch\n\n# 次版本号升级（1.0.0 -\u003e 1.1.0）\n./scripts/release-frontend.sh minor\n\n# 主版本号升级（1.0.0 -\u003e 2.0.0）\n./scripts/release-frontend.sh major\n```\n\n脚本会自动：\n- 读取并升级 `pubspec.yaml` 中的版本号\n- 创建 Git 标签（格式：`v{version}`）\n- 推送 Git 标签到远程仓库\n- 提供交互式确认和进度反馈\n\n## 后端\n\n需要配合 [Songloft 后端](https://github.com/songloft-org/songloft) 服务运行。默认连接 `http://localhost:58091`，可在登录页中修改 API 地址。\n\n默认账号：admin / admin\n\n🔗 **服务端 GitHub**: [https://github.com/songloft-org/songloft](https://github.com/songloft-org/songloft)\n\n## 许可证 / 第三方组件\n\n本项目基于 [Apache-2.0 license](LICENSE) 开源。\n\n\u003e **LGPL 合规提示**：本客户端在 Windows / Linux 上通过 `just_audio_media_kit` 调用 libmpv（LGPL-2.1+）作为音频后端。Windows 端打包的是 **audio-only LGPL 构建**（不含 GPL 编码器如 libx264 / libx265），Linux 端动态链接系统的 libmpv。完整的第三方组件清单、许可证类型与源码获取途径见 [NOTICE](NOTICE)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsongloft-org%2Fsongloft-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsongloft-org%2Fsongloft-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsongloft-org%2Fsongloft-player/lists"}