Zhou Weidong
|
9df36bc358
|
feat(ui): 合并品牌启动页与选集交互
|
2026-10-19 09:28:27 +08:00 |
|
Zhou Weidong
|
c1cb7d1c11
|
feat(ui): 更新品牌启动页与选集交互
|
2026-10-19 09:28:16 +08:00 |
|
Zhou Weidong
|
4778ce2c75
|
merge: 合并 K15 首页服务器设置修复
|
2026-10-17 23:13:07 +08:00 |
|
Zhou Weidong
|
c4694c6f18
|
fix(flutter): 增加首页服务器设置并更新真机默认地址
|
2026-10-17 23:12:47 +08:00 |
|
Zhou Weidong
|
9fe62d13cb
|
merge: 合并 K14 文档接口统计修正
|
2026-10-17 23:03:52 +08:00 |
|
Zhou Weidong
|
213c86e93c
|
docs(client): 修正已接接口数量说明
|
2026-10-17 23:03:43 +08:00 |
|
Zhou Weidong
|
27e5286b10
|
merge: 合并 K14 客户端文档
|
2026-10-17 23:02:47 +08:00 |
|
Zhou Weidong
|
5a28845b5e
|
docs(client): 重写 README 并补充任务与文件说明
|
2026-10-17 23:02:28 +08:00 |
|
Zhou Weidong
|
f95325d581
|
merge: 合并 K13 开发服务器地址设置
|
2026-10-17 22:54:25 +08:00 |
|
Zhou Weidong
|
907562a874
|
feat(flutter): 增加 debug 运行时服务器地址设置
|
2026-10-17 22:54:07 +08:00 |
|
Zhou Weidong
|
b76228905c
|
merge: 合并 K12 首页与空态视觉修订
|
2026-10-17 22:44:40 +08:00 |
|
Zhou Weidong
|
2dd4627bdc
|
feat(flutter): 精简首页标题并重做空态视觉
|
2026-10-17 22:44:21 +08:00 |
|
Zhou Weidong
|
b5a8656ff0
|
merge: 合并 K11 首页三列网格
|
2026-10-17 22:34:38 +08:00 |
|
Zhou Weidong
|
f0db631fa2
|
feat(flutter): 首页网格改为三列并首位显示全部
|
2026-10-17 22:34:14 +08:00 |
|
Zhou Weidong
|
0466b4b425
|
merge: 合并 K10 统一空态组件
|
2026-10-17 17:44:58 +08:00 |
|
Zhou Weidong
|
6d08330388
|
feat(flutter): 统一空列表占位组件
|
2026-10-17 17:44:44 +08:00 |
|
Zhou Weidong
|
19babb8f4a
|
merge: 合并 iOS shared_preferences 编译修复
|
2026-10-17 17:30:50 +08:00 |
|
Zhou Weidong
|
2c30f83ab3
|
chore(ios): 固定 shared_preferences_foundation 2.5.6
|
2026-10-17 17:30:33 +08:00 |
|
Zhou Weidong
|
a4415c872d
|
chore(deps): 同步依赖锁文件
|
2026-10-17 17:27:07 +08:00 |
|
Zhou Weidong
|
2c381be5e8
|
merge: 合并 K9 首页全部剧目网格
|
2026-10-17 17:24:58 +08:00 |
|
Zhou Weidong
|
cf03178cc5
|
feat(flutter): 首页改为两列全部剧目网格
|
2026-10-17 17:24:45 +08:00 |
|
Zhou Weidong
|
99f64ab870
|
merge: 合并 K8 登录页视觉重设计
|
2026-10-17 17:15:09 +08:00 |
|
Zhou Weidong
|
45c3c645ff
|
feat(flutter): 重设计登录页视觉
|
2026-10-17 17:14:56 +08:00 |
|
Zhou Weidong
|
6cc5bfc3be
|
merge: 合并首页轮播与观看历史真机修复
|
2026-10-17 17:00:20 +08:00 |
|
Zhou Weidong
|
5058853af3
|
fix(flutter): 注册目录仓库并修正首页轮播数据源
|
2026-10-17 17:00:07 +08:00 |
|
Zhou Weidong
|
3e8703b840
|
merge: 合并 K7 轮播与站内通知
|
2026-10-17 16:50:38 +08:00 |
|
Zhou Weidong
|
b870956665
|
feat(flutter): 增加轮播自动播放与站内通知
|
2026-10-17 16:50:25 +08:00 |
|
Zhou Weidong
|
b7b1c50427
|
merge: 合并 K6 导航与观看历史缺陷修复
|
2026-10-17 16:41:35 +08:00 |
|
Zhou Weidong
|
732483465c
|
fix(flutter): 修复导航白线与观看记录错误透传
|
2026-10-17 16:41:24 +08:00 |
|
Zhou Weidong
|
ac706a42a5
|
merge: 合并 K6 iOS SPM 构建修复
|
2026-10-17 16:32:22 +08:00 |
|
Zhou Weidong
|
cc037a2956
|
fix(ios): 刷新 Flutter SPM 包后再准备框架
|
2026-10-17 16:32:11 +08:00 |
|
Zhou Weidong
|
0cedaab795
|
merge: 合并 K6 登录导航与震动反馈
|
2026-10-17 16:16:07 +08:00 |
|
Zhou Weidong
|
8a481d5c62
|
feat(flutter): 增加关键操作震动反馈
|
2026-10-17 16:15:46 +08:00 |
|
Zhou Weidong
|
e609e3ad8d
|
feat(flutter): 优化登录页与底部导航
|
2026-10-17 16:11:01 +08:00 |
|
Zhou Weidong
|
e52d81881c
|
merge: 合并 K5 克莱因蓝主题与印尼语适配
|
2026-10-17 15:58:29 +08:00 |
|
Zhou Weidong
|
10d448c8ba
|
feat(flutter): 应用克莱因蓝主题与印尼语适配
|
2026-10-17 15:58:17 +08:00 |
|
Zhou Weidong
|
e1147cfcba
|
merge: 合并 K3 举报错误透传修复
|
2026-10-17 15:29:27 +08:00 |
|
Zhou Weidong
|
1488ee8f85
|
fix(flutter): 透传举报本人评论错误
|
2026-10-17 15:29:18 +08:00 |
|
Zhou Weidong
|
9db6935308
|
merge: 合并 K3 客户端互动能力
|
2026-10-17 15:26:51 +08:00 |
|
Zhou Weidong
|
d361034226
|
feat(flutter): 接入互动评论点赞举报
|
2026-10-17 15:26:42 +08:00 |
|
Zhou Weidong
|
45f5f25640
|
merge: 合并 K2 客户端分类记录收藏与下载授权
|
2026-10-17 14:49:36 +08:00 |
|
Zhou Weidong
|
cc4d7c5a9d
|
feat(flutter): 接入分类记录收藏与下载授权
|
2026-10-17 14:49:16 +08:00 |
|
jianghaifeng
|
00280ca0da
|
merge: 同步 main 的作者标识提交到 develop
main 的 eaf8fb4 机械性地给全仓加了 // Author 头,develop 侧包名已改 fruitshorts、
并删除了 demo_media/home_feed_category/home_feed_sections 三个文件,故按 develop 口径解决冲突:
保留 fruitshorts 包名与删除结果,补回 Author 头。
|
2026-10-17 13:48:31 +08:00 |
|
Vicky
|
84a1f58a0a
|
test(client): 新增设备侧集成测试(真机跑通后端可达性)
红线第 10 条(设备验证必须设备侧取证)配套:integration_test/app_backend_test.dart
在手机进程里真实请求 /app/home/feed 与 /app/dramas/{id},并用真 App 断言首页剧目列表能渲染。
把 API_BASE_URL 打进设备日志,便于区分地址不对与设备连不上。
注意:真机执行由用户负责(用户 20:45 指令),本文件按原样交付、不再改动。
本项目 iOS 用 SPM,无 Podfile,不需要 pod install。
|
2026-10-16 18:05:58 +08:00 |
|
Vicky
|
d7eff4ca59
|
feat(client): 对接详情/播放/进度续看/收藏(K1 看剧闭环)+ 三态 UI
后端接口从 6 个扩到 13 个,全部走真数据:
- 新增 api:playback_api(/app/episodes/{id}/play)、watch_api(/app/watch/*)、
library_api(/app/favorites*);票据从 CatalogApi 搬到 PlaybackApi
- 新增 repository:PlaybackRepository(含票据 TTL 缓存,默认 10 分钟,时钟可注入)、
FavoriteRepository、WatchHistoryRepository 换成服务端模型(每剧一条续看记录,删掉 demoProfileId)
- PlayerLogic:起播前取票(拿不到给三态 UI,失败可重试);accessType 驱动锁定文案,
不在前端猜;签名地址原样交给播放器(只补 host,不动 path/query);
进度上报节流 5s → 10s,切集/退出/切后台各补一次,播完带 finished
- 续看定位:服务端记录里的那一集才 seek(其它集从头播),续看位置进详情/播放页时读一次
- FavoriteController:收藏以服务端为准,乐观更新 + 失败回滚;退出登录清空
- UI 三态:详情页(加载/失败可重试/空剧集 + 续看进度条 + 收藏按钮)、
播放页(票据加载中/失败可重试/后端判定不可播)、我的页(续看失败可重试、收藏三态、最近观看)
- l10n 新增 8 个键(en/zh/id 三份):网络/进度/收藏失败、锁定提示、续看文案等
测试:flutter test 188 全过(存量 27 个测试文件未跑红);新增票据过期重取、进度节流、
续看定位、收藏回滚、签名 query 原样保留、真实后端端到端联调(live_watch_flow)
|
2026-10-16 17:39:05 +08:00 |
|
Vicky
|
94ff9f1177
|
fix(client): 兼容后端 Long 字段字符串化(id 与计数)
后端 J1 起 Long/long 一律以字符串下发(含雪花 id 与 viewCount/expiresIn)。
客户端 id 方向本来就是 (json['id'] ?? '').toString(),不受影响;会被 as num? 打挂的
是 Long 计数,这里加统一兼容解析并替换 3 处:
- lib/core/data/models/json_numbers.dart(新增,接受数字或数字字符串)
- lib/core/data/models/auth_session.dart(expiresIn,后端 long)
- lib/core/data/models/drama.dart(viewCount,后端 Long ×2)
- test/core/json_id_parsing_test.dart(新增 8 条回归用例)
其余 as num?(durationSec/unlockCoin/number/totalEpisodes/freeEpisodes/code)对应后端
Integer/int,仍是数字,未改动;未碰任何业务逻辑与 UI。
|
2026-10-16 16:44:02 +08:00 |
|
Vicky
|
61454e36b1
|
feat(client): 改名为 FruitShorts 并新增 id-ID 印尼语文案(1-3 + 1-4 合并)
为什么:a) 应用对外名称要统一成 FruitShorts(产品名,nontonki 是原型代号);
b) 首发市场是印尼,界面必须有印尼语;c) 归档要求"新增 id-ID 与改名合并生成一次 l10n,别分两次"。
改名:
- pubspec name: nontonki → fruitshorts(Dart 包名),description 同步;28 个文件的 package: 导入前缀替换
- Android android:label、iOS CFBundleDisplayName/CFBundleName → FruitShorts
- 图标资源 assets/icon/nontonki.png → fruitshorts.png(含 pubspec 两处引用)
- README 同步(补印尼语说明,顺带修掉写错的模块名 reelshort-app-api → fruitshorts-app-api)
文案:
- 三份 arb 的 appName → FruitShorts、brandMark → FRUITSHORTS、shareFooter → FruitShorts(不留 demo 标记)
- 新增 lib/l10n/app_id.arb:174 个值键与 en/zh 完全一致,按印尼语习惯翻译(Coin→Koin、Episode→Episode)
- 一次性 flutter gen-l10n 生成 app_localizations_id.dart;id 自动进入 supportedLocales,默认 locale 未改
- 新增 test/config/l10n_id_test.dart:钉住 id 文案、supportedLocales 含 id、品牌文案无 demo 标记、占位符渲染
不动:applicationId / bundle id(lumadrama 遗留,等裁定)、目录名、业务逻辑与页面结构、语言选择页(仍只有 en/zh)
门禁:dart analyze lib test 零告警;flutter test 159 全过(基线 155 + 新增 4);残留扫描 0 命中;
三份 arb 键集一致(174/174/174);真机(iPhone iOS 26.6.1)构建安装启动成功,devicectl 列出显示名 FruitShorts
|
2026-10-16 10:16:59 +08:00 |
|
Vicky
|
0e5d550b50
|
test(client): 用例名统一为 should_<期望>_when_<条件>(155/155)
为什么:红线第 8 条门禁立即生效,要求 Flutter 测试命名合规;此前 155 条用例名是英文自然语言
或中文描述,合规数 0/155,属存量欠账,按"先补齐再上新功能"在本批处理。
- 25 个测试文件、155 条用例改名,按「文件 + 旧名」精确定位,每条断言命中恰好 1 次才替换
- 只改名字字面量:改动行 155 删 + 155 增,无一行不含字符串字面量(断言与用例体零改动)
- 门禁:dart analyze lib test = No issues found;flutter test = 155 全过
|
2026-10-16 09:41:14 +08:00 |
|
Vicky
|
1853e1845c
|
refactor(client): 网络层由官方 http 换成 dio(对外行为不变)
为什么:权威文档(AGENTS.md / CODING_STANDARDS.md)强制网络层用 dio,差异清单 A 组第 1 题
用户裁定选 A;原来用官方 http 是在无文档状态下按口头要求选的。
- ApiClient 改用 dio + BaseOptions(validateStatus 恒真、8s 超时、ResponseType.bytes 自行 UTF-8 解码)
- 新增 AuthHeaderInterceptor(Authorization / X-Device-Id)与 EnvelopeInterceptor
(解包 {code,message,data} + 错误码映射 + 401 判定)
- 401 → 刷新 → 重发一次在 ApiClient 里编排,刻意不放在拦截器内重发:dio 的排队拦截器
在回调里再发请求会自锁
- 接口层(auth_api/catalog_api)签名、全部 controller/logic/page 未改动
- 测试:新增假 dio adapter 替代 MockClient,断言口径一条未改;用例名改为 should_<期望>_when_<条件>;
新增 api_client_test(解包/错误映射/请求头/查询参数/跳过重试)与 live_auth_test(真实后端 POST 链路)
- pubspec:加 dio、移除已无引用的 http
- 实测:dart analyze lib test 零告警;flutter test 155 全过;真实联调(8081)GET/POST 链路均通
|
2026-10-16 09:30:46 +08:00 |
|
Zhou Weidong
|
eaf8fb4371
|
style: 全量补充作者标识 // Author: fruit.com.cn
|
2026-10-16 00:01:58 +08:00 |
|