Zhou Weidong
|
4bc04fd8ae
|
style(theme): 客户端切换深色视觉风格
|
2026-10-22 13:49:20 +08:00 |
|
Zhou Weidong
|
a48433f01d
|
fix(profile): 修复我的收藏与观看历史列表不显示
|
2026-10-22 13:09:55 +08:00 |
|
Zhou Weidong
|
7a588898fa
|
feat(debug): 增加 HTTP 请求响应日志
|
2026-10-22 12:15:51 +08:00 |
|
Zhou Weidong
|
d076c57283
|
fix(auth): 登录异常改为居中吐司
|
2026-10-22 09:57:57 +08:00 |
|
Zhou Weidong
|
13a14f3e85
|
feat(theater): 剧场分类列表服务端分页
|
2026-10-21 18:24:14 +08:00 |
|
Zhou Weidong
|
677e49fa6e
|
fix(home): 首切频道预取并保留播放画面
|
2026-10-21 17:53:58 +08:00 |
|
Zhou Weidong
|
3c4d65a9b2
|
fix(home): 修复频道快速切换卡 loading
|
2026-10-21 17:46:42 +08:00 |
|
Zhou Weidong
|
ae61d9ec4c
|
feat(home): 首页按内容类型分频道 Feed 并支持分页
|
2026-10-21 17:33:52 +08:00 |
|
Zhou Weidong
|
35860e056b
|
fix(ui): 下拉刷新刷新期间冻结下拉位移
|
2026-10-21 15:23:46 +08:00 |
|
Zhou Weidong
|
45e8707f1e
|
feat(ui): 下拉刷新完成后才回弹
|
2026-10-21 15:12:41 +08:00 |
|
Zhou Weidong
|
9b31d83e39
|
perf(home): 冷启动提前拉取首页数据
|
2026-10-20 19:51:41 +08:00 |
|
Zhou Weidong
|
107ae40d2a
|
fix(flutter): 统一下拉刷新主色文案
|
2026-10-20 17:02:20 +08:00 |
|
Zhou Weidong
|
69eaacd74f
|
fix(flutter): 修复下拉刷新页面跟随
|
2026-10-20 16:57:28 +08:00 |
|
Zhou Weidong
|
5bdcb989bb
|
feat(flutter): 统一文字下拉刷新
|
2026-10-20 16:47:13 +08:00 |
|
Zhou Weidong
|
8493c4ef3b
|
fix(flutter): 优化二级页面返回按钮样式
|
2026-10-20 16:09:10 +08:00 |
|
Zhou Weidong
|
1c6c92170d
|
feat(flutter): 统一二级页头并恢复新剧暖色
|
2026-10-20 15:55:12 +08:00 |
|
Zhou Weidong
|
bed6bbb75b
|
feat(flutter): 播放页互动数量与评论面板收紧
|
2026-10-20 12:06:21 +08:00 |
|
Zhou Weidong
|
8c43e9e385
|
feat(flutter): 重构播放页并增加语言切换
|
2026-10-20 11:01:38 +08:00 |
|
Zhou Weidong
|
136ee74618
|
feat(app): 完成 P0 钱包解锁、下载落盘与手机号登录
|
2026-10-19 23:46:47 +08:00 |
|
Zhou Weidong
|
8a481d5c62
|
feat(flutter): 增加关键操作震动反馈
|
2026-10-17 16:15:46 +08:00 |
|
Zhou Weidong
|
d361034226
|
feat(flutter): 接入互动评论点赞举报
|
2026-10-17 15:26:42 +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 |
|
Vicky
|
feecc349a0
|
chore(client): 归档原型阶段新增文件(配置、主题、模型与测试)
为什么:上一批归档只覆盖了「已跟踪文件的修改」,原型阶段新增的文件(app_config、theme、
home_feed/play_ticket 模型、catalog_api、测试目录等)还是未入库状态 —— 而已入库的代码会 import 它们,
留在工作区会导致 HEAD 处的代码编译不过。一并归档,让 HEAD 自洽。
纯归档,无行为改动。
|
2026-10-15 17:53:45 +08:00 |
|