Flutter 跨平台客户端 — Material Design 3 安全私有云 NAS 界面
RockZeroOS UI 是 RockZeroOS 私有云 NAS 操作系统的跨平台客户端,支持 Android、Windows、Linux 和 Web。使用 Flutter + Riverpod 构建,采用 Material Design 3 设计规范,支持动态主题、毛玻璃效果、全面屏手势导航。
- 仪表盘 — CPU、内存、磁盘、网络实时监控,计时器风格速度测试
- 文件管理 — 磁盘浏览、目录导航、文件上传/下载、LAN 文件传输
- 视频播放 — SAE 加密 HLS 流媒体,media_kit (libmpv) 硬件加速解码,
SizedBox.expand()确保全平台正确显示,编解码自适应超时(90s 播放列表等待),PTS 时间戳归零修正(rebase-start-time=yes+fflags=+genpts+discardcorrupt),客户端偏移检测(对比服务器时长提示自动修正 MKV 非零起始 PTS) - 音频播放 —
just_audio三级回退音频源策略,支持自动服务器端转码(15+ 不支持的编码格式自动转为 AAC/MP3),返回键最小化到后台 mini player(而非停止),显式停止按钮 - 游戏中心 — 多平台游戏商城(Steam/Epic/WeGame/Ubisoft/Xbox),从官方 API 实时获取数据,支持游戏收藏和统一库,内置目录 25+ 游戏使用 Steam CDN 封面图
- WASM 应用 — 内置 SteamDB 查看器(支持游戏名称 + AppID 双模式搜索)、M3U8 视频下载器(支持自定义保存路径)、Steam P2P 连接分析(包含 NAT 类型说明和排故指南)
- 存储管理 — 智能格式化、自动挂载、分区管理、SMART 监控、安全擦除
- 应用商店 — Docker 应用安装和管理
- JWT 认证 — EdDSA (Ed25519) + BLAKE3 签名
- SAE 密钥交换 — WPA3 Dragonfly (Curve25519) 完整实现
- 零知识证明 — Bulletproofs RangeProof 登录验证
- FIDO2/WebAuthn — 支持 YubiKey、TouchID、FaceID、Windows Hello
- 安全存储 —
flutter_secure_storage凭证加密
- Material Design 3 — 完整 MD3 设计规范,动态主题色
- MD3 Expressive 加载组件 — 星爆旋转器 (starburst spinner)、波浪进度条 (wavy progress)、脉冲圆点 (pulsing dots)、分段旋转器 (segmented spinner)、安全连接盾牌动画 (SAE 握手专用)、缓冲圆点环 (buffering indicator)
- 动态壁纸 — 自定义壁纸 + 80%壁纸色/20%系统色混合
- 毛玻璃卡片 —
BackdropFilter高对比度磨砂效果 (sigma 20) - 全面屏 — 透明状态栏/导航栏,手势导航,预测返回
- Expressive 动画 —
flutter_animate精细过渡动画
lib/
├── core/
│ ├── models/ # API 数据模型 (DiskInfo, MediaInfo, etc.)
│ ├── network/ # API 服务层 (Dio HTTP 客户端, 请求/响应拦截)
│ ├── services/ # 壁纸服务, media_kit 初始化, 动态配色
│ ├── theme/ # M3 主题, 动态色彩, 动画曲线
│ └── widgets/ # 通用组件 (ShellScaffold, GlassmorphicCard, DynamicColorCard, MD3LoadingIndicator)
├── features/
│ ├── auth/ # 登录/注册 (毛玻璃卡片, SAE+JWT+ZKP)
│ ├── dashboard/ # 仪表盘, 网速测试 (计时器 UI)
│ ├── files/ # 文件浏览器
│ │ └── presentation/pages/
│ │ ├── files_page.dart # 磁盘网格 + 文件列表
│ │ ├── enhanced_media_player_page.dart # 视频播放器 (media_kit + hwdec)
│ │ ├── secure_hls_video_player.dart # SAE+HLS 安全视频播放器 (PTS 偏移修正)
│ │ └── enhanced_audio_player_page.dart # 音频播放器 (三级回退, 返回=最小化)
│ ├── appstore/ # 游戏中心
│ │ └── presentation/
│ │ ├── pages/wasm_store_page.dart # 多平台游戏商城主页
│ │ └── widgets/platform_game_tab.dart # 平台游戏标签页 (官方 API 数据)
│ ├── device_discovery/ # mDNS 设备自动发现
│ ├── disk/ # 磁盘格式化与管理
│ ├── storage/ # 存储概览
│ ├── system/ # 系统监控 (CPU/内存/磁盘/USB/内核/运行时间)
│ └── settings/ # 设置 (壁纸/模糊/主题)
└── services/
├── sae_client_curve25519.dart # SAE Dragonfly 客户端实现
└── sae_handshake_service.dart # SAE 握手编排
每个平台标签页通过后端代理从官方 API 获取实时游戏数据:
| 平台 | 官方 API 来源 | 数据内容 |
|---|---|---|
| Epic Games | Epic GraphQL API (graphql.epicgames.com) |
游戏名称、描述、价格、封面图、类型标签 |
| WeGame | WeGame API (wegame.com.cn/api/v1/) |
游戏列表、热门排行、封面图 |
| Ubisoft | Ubisoft Store API + Ubisoft Services API | 游戏目录、价格、封面图 |
| Xbox | Game Pass 目录 + Microsoft DisplayCatalog API | Game Pass 游戏、封面图、价格 |
- 实时数据显示 🔴 实时 标志
- 封面图从官方 CDN 加载
- 30 分钟服务端缓存
- API 不可达时自动降级为内置目录数据
- 使用
media_kit(libmpv) 硬件加速解码 SizedBox.expand()包裹确保视频画面正确显示- mpv 配置:
hwdec=auto-safe,rebase-start-time=yes,demuxer-lavf-o=fflags=+genpts+discardcorrupt,cache=yes,demuxer-max-bytes=256MiB,cache-secs=90 - PTS 偏移双重修正: 服务端 ffmpeg
-fflags +genpts+discardcorrupt -avoid_negative_ts make_zero+ 客户端_detectTimestampOffset()对比服务器时长自动计算偏移量并修正显示/seek 坐标 - 编解码自适应: 播放列表等待超时从 30s 调整为 90s,支持 AV1/VP9 转码场景
- Android: MediaCodec, iOS: VideoToolbox, Desktop: 自动检测
- 使用
just_audio播放 - 三级回退策略: LockCachingAudioSource → AudioSource.uri → setUrl
- 每级 20 秒超时,失败自动切换下一级
- 关闭播放器时使用超时保护(stop 3s / dispose 2s),避免编解码器死锁导致黑屏
- 15+ 不支持的编码格式 (wmav1/2, wmalossless, pcm_bluray, cook, atrac3, ape 等) 由服务端自动转码
- 返回键 = 最小化到后台: 按下返回键或系统返回手势时,页面播放器暂停并将播放状态(位置/音量/速度/循环)转移到全局
AudioPlayerService,随后关闭页面,音频在 mini player 中继续播放。 - 停止按钮 = 完全停止: AppBar 中的停止按钮 (
Icons.stop_circle_outlined) 才会停止页面播放器和全局服务,确保退出即停播。 - 从小窗恢复到大播放器时,会先停止全局小窗服务再初始化页面播放器,避免“双音轨并发播放”。
- 点击“后台播放”按钮行为与返回键相同。
- Mini Audio Player 进入大播放器使用 MD3 风格强调曲线过渡(短时淡入+轻微位移),降低跳变感。
- 视频/媒体全屏页面统一使用
SystemUiMode.edgeToEdge+SystemUiOverlay.values,保留 Android 全面屏手势(包括返回手势)。 - 退出全屏时恢复系统栏与方向策略,避免手势区域被沉浸模式吞噬。
# 获取依赖
flutter pub get
# 运行 (选择平台)
flutter run -d windows
flutter run -d linux
flutter run -d android
flutter run -d chrome# Android APK (ARM64 目标)
flutter clean
flutter build apk --release --target-platform android-arm64
# 安装到设备
adb install build/app/outputs/flutter-apk/app-release.apk
# Windows
flutter build windows --release
# Linux
flutter build linux --release
# Web
flutter build web --release所有 API 端点与 Rust 后端完全对齐:
| 模块 | 端点前缀 | 说明 |
|---|---|---|
| 认证 | /api/v1/auth/* |
注册、登录、JWT 刷新、ZKP 登录 |
| 文件管理 | /api/v1/filemanager/* |
文件 CRUD、上传、下载、媒体预览 |
| 流媒体 | /api/v1/streaming/* |
媒体信息、缩略图、HLS 播放列表、音频转码 |
| 安全 HLS | /api/v1/secure-hls/* |
SAE 握手、会话创建、加密 HLS 流 |
| 系统 | /api/v1/system/* |
CPU、内存、磁盘、USB、硬件信息 |
| 存储 | /api/v1/storage/* |
磁盘列表、格式化、挂载 |
| 存储管理 | /api/v1/storage-management/* |
高级存储操作、SMART、安全擦除 |
| 应用商店 | /api/v1/appstore/* |
Docker 应用管理 |
| WASM 商店 | /api/v1/wasm-store/* |
游戏中心、WASM 应用、Steam/Epic API |
| 游戏平台 | /api/v1/wasm-store/platform/games |
Epic/WeGame/Ubisoft/Xbox 官方 API 数据 |
| FIDO2 | /api/v1/fido/* |
WebAuthn 注册/验证 |
| 速度测试 | /api/v1/speedtest/* |
下载/上传/延迟测试 |
| 邀请 | /api/v1/invite/* |
邀请码创建/验证 |
| ZKP | /api/v1/zkp/* |
零知识证明操作 |
| 依赖 | 版本 | 用途 |
|---|---|---|
| flutter_riverpod | 3.0.3 | 状态管理 |
| go_router | 17.0.1 | 路由导航 |
| media_kit | 1.2.6 | 视频播放 (libmpv) |
| just_audio | 0.10.5 | 音频播放 |
| dio | 5.8.0 | HTTP 客户端 |
| flutter_animate | 4.5.2 | 动画效果 |
| flutter_secure_storage | 10.0.0 | 安全凭证存储 |
| pointycastle + edwards25519 | — | SAE/Ed25519 加密 |
| webview_flutter | 4.10.0 | 内嵌浏览器 |
| window_manager | 0.5.1 | 桌面窗口管理 |
# 静态分析
dart analyze
# 格式化
dart format lib/
# 运行测试
flutter testGNU Affero General Public License v3.0 (AGPL-3.0)
See LICENSE for the full license text.
