Zerexa Video 的原生跨平台客户端(Flutter 构建,非网页套壳),一套代码编译出 Android APK、iOS IPA、Linux 与 Windows 原生应用,直连 video.zerexa.net API。
产品要求:代码、README 与应用内不使用表情符号,图标一律使用 Material Icons 与 SVG 资源。
| 平台 | 产物 | 说明 |
|---|---|---|
| Android | zerexa-video-android-universal-<ver>.apk |
universal APK(arm64 / arm / x86_64) |
| iOS | zerexa-video-ios-unsigned-<ver>.ipa |
未签名,TrollStore / AltStore / Sideloadly 侧载 |
| Linux x64 | zerexa-video-linux-x64-<ver>.tar.gz |
解压后运行 ./zerexa-video/zerexa_video(需系统 libmpv) |
| Windows x64 | zerexa-video-windows-x64-<ver>.zip |
解压后运行 zerexa-video\ZerexaVideo.exe |
全部产物由 GitHub Actions 自动构建并发布到 Releases。
- 视频:原生播放器(media_kit,硬解)、弹幕浮层、字幕轨道加载与切换、点赞 / 收藏 / 投币、评论与楼中楼回复
- 发现:关键词搜索、分类筛选(分区标签自动从服务端数据提取)、排序(最新 / 最多播放 / 最多点赞)、站点公告栏
- 登录 / 注册:GeeTest v4 人机验证(WebView 内嵌官方 gt4.js,验证令牌随请求提交);未登录可正常浏览全部视频
- 公告:支持查看完整详情(标题、正文、发布者与时间)
- 动态:时间线、发布动态(支持图片)、点赞、删除自己的动态
- 专栏:图文创作与阅读、编辑 / 删除、点赞
- 私信与站内信:会话列表、即时聊天界面、通知中心、未读角标
- 工单:提交 / 回复 / 关闭 / 重开,状态与优先级
- 公投:选项投票、实时结果条形图、防重复投票
- 合集:创建 / 编辑 / 删除合集,添加与移除视频
- 投稿:视频文件分片上传(预签名 URL),进度显示
- 举报:完整的举报表单(分类 + 描述),支持举报用户 / 视频 / 评论 / 动态
- 管理后台:概览统计、用户封禁 / 解禁 / 角色变更、视频审核(通过 / 拒绝 / 删除)、举报处理、公告增删改
- 多主题:Material You / Win8 Metro / Zerexa Clean(默认)/ Midnight 深色,即时切换并持久化
- Flutter 3.47 + Dart 3.13,Material 3
media_kit跨平台视频播放(Android / iOS / Windows / Linux)dio网络层(JWT Bearer 自动注入,无 CORS 限制直连上游)provider状态管理(AuthStore / ThemeStore / UnreadBadge)shared_preferences令牌与主题持久化flutter_svg+ 自绘 SVG 品牌资源file_picker跨平台文件选择(分片上传)
lib/
main.dart 入口:Provider 装配 + MaterialApp
core/
api.dart ZerexaApi:全部上游端点封装
models.dart 数据模型(宽松 JSON 解析)
format.dart 数字 / 时间 / 字节格式化
stores/app_stores.dart AuthStore(登录态)+ ThemeStore(主题)
theme/app_themes.dart 四套主题 + ZxSpec 扩展令牌
widgets/
common.dart 头像 / 徽章 / 视频卡片 / 空态 / 错误态
danmaku_overlay.dart 原生弹幕浮层(轨道分配 + 滚动动画)
report_dialog.dart 举报完整表单
features/
app_shell.dart 自适应导航(底部栏 / 侧栏)
home_view.dart 首页信息流
discover_view.dart 搜索与分类
watch_view.dart 播放页(弹幕 / 字幕 / 评论 / 互动)
auth_view.dart 登录 / 注册
mine_view.dart 个人中心(收藏 / 历史 / 功能入口)
user_page_view.dart 用户公开主页
dynamics_view.dart 动态时间线
articles_view.dart 专栏(列表 / 详情 / 编辑器)
collections_view.dart 合集(列表 / 详情 / 编辑器)
messages_view.dart 消息中心(私信 + 通知)
chat_screen.dart 聊天会话
tickets_view.dart 工单
votes_view.dart 公投
upload_view.dart 视频投稿(分片上传)
settings_view.dart 设置(主题 / 关于)
admin_view.dart 管理后台(五个标签页)
上游站点的登录与注册受 GeeTest v4 人机验证保护,客户端流程与官网一致:
GET /api/auth/captcha-config获取geetest_enabled与公开的geetest_captcha_id- WebView 加载
https://static.geetest.com/v4/gt4.js,initGeetest4(float 模式)渲染验证组件 - 用户完成验证后取
getValidate()令牌(lot_number/captcha_output/pass_token/gen_time) - 令牌作为
geetest字段随登录 / 注册请求提交,由上游服务端用其私钥完成二次校验
安全说明:CAPTCHA_KEY 是服务端校验密钥,只存在于服务端,客户端代码与二进制中不包含、也不需要它;客户端只使用公开的 captcha id(且优先从接口动态获取,硬编码值仅作兜底)。桌面端(Linux / Windows)暂未内嵌验证码组件,会提示改用移动端或官网登录。
flutter pub get
flutter run # 连接的设备 / 桌面端
flutter analyze
flutter test覆盖上游地址(默认 https://video.zerexa.net):
flutter run --dart-define=API_BASE_URL=https://your-mirror.example各平台构建:
flutter build apk --release # Android
flutter build linux --release # Linux(需 clang/cmake/ninja/libgtk-3-dev/libmpv-dev)
flutter build windows --release # Windows
flutter build ios --release --no-codesign # iOS- push 到
main(不带v*tag)→ 自动发 pre-release,版本号0.0.0-pre.<commit 前 6 位>,tagpre-<sha6> - push
v*tag(如v0.5.0)→ 自动发正式 release 并抢占 latest - 四个构建 job(Android / Linux / Windows / iOS)并行执行,全部成功后统一上传产物与
SHA256SUMS.txt
MIT License,见 LICENSE。