269 lines
10 KiB
Markdown
269 lines
10 KiB
Markdown
# 开发进度
|
||
|
||
## 2026-10-21 K96 剧场页服务端分类分页
|
||
|
||
- 已完整读取 K96 `docs/plans/INBOX.md`。
|
||
- 已从最新 `origin/develop` 创建 ReelShort `feat/k96-theater-feed`。
|
||
- 计划见 FruitServer `docs/plans/2026-10-21-K96-theater-feed.md`。
|
||
- 客户端将新增 TheaterFeedController,并让剧场「全部 / 分类」改用
|
||
`/app/feed` 服务端游标分页;不改首页 K94/K95 已交付逻辑。
|
||
- 已完成 `CatalogApi.feed` / `CatalogRepository.fetchFeed` 可选 `categoryId`,
|
||
非空才拼请求参数。
|
||
- 已新增 `TheaterFeedController`:按分类独立缓存,缓存先渲染后静默刷新,
|
||
10 秒超时、游标追加去重、失败保留旧数据、失败分类切回自动重试。
|
||
- 剧场页「全部」和分类 chips 已改用 theater feed;滚动剩余不足 400px 触发
|
||
`loadMore`,下拉刷新同时执行 categories 与 theater 刷新,搜索模式保持独立。
|
||
- 已补分类参数、缓存切换、分页去重、hasMore 停止、失败保留、失败重试、
|
||
分类点击请求和滚动加载 widget 测试。
|
||
|
||
门禁原始输出:
|
||
|
||
```text
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
00:52 +553: All tests passed!
|
||
|
||
$ flutter build apk --debug
|
||
Running Gradle task 'assembleDebug'... 24.8s
|
||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||
```
|
||
|
||
解读:静态分析零告警,553 项全量测试通过,debug APK 构建成功;
|
||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||
|
||
## 2026-10-21 K97 修复 iOS 评论输入弹窗键盘避让
|
||
|
||
- 已完整读取 K97 `docs/plans/INBOX.md`。
|
||
- 已从最新 `origin/develop` 创建 `fix/k97-ios-comment-keyboard`。
|
||
- 计划见 FruitServer `docs/plans/2026-10-21-K97-ios-comment-keyboard.md`。
|
||
- Android 保留既有 pinned/channel 策略;iOS 与其他平台改用实时
|
||
`MediaQuery.viewInsets.bottom`,并补 iOS 键盘避让测试。
|
||
- 已完成 `_isAndroid` 平台分流;Android 的 channel、80ms 防抖和 pinned 逻辑保持不变,
|
||
iOS/其他平台直接读取实时 viewInsets,超过屏幕 60% 的异常值按 0 处理。
|
||
- 面板已使用 160ms `easeOutCubic` AnimatedPadding;Android 不包裹 SafeArea,
|
||
iOS/其他平台使用 `SafeArea(top: false)` 处理 home indicator。
|
||
- 已补 iOS insets=300/0 测试,发表按钮在键盘上方;Android pinned 既有用例全部通过。
|
||
|
||
门禁原始输出:
|
||
|
||
```text
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
00:54 +555: All tests passed!
|
||
|
||
$ flutter build apk --debug
|
||
Running Gradle task 'assembleDebug'... 26.2s
|
||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||
|
||
$ flutter build ios --simulator --no-codesign
|
||
Xcode build done. 44.0s
|
||
✓ Built build/ios/iphonesimulator/Runner.app
|
||
```
|
||
|
||
解读:静态分析零告警,555 项全量测试通过,Android 与 iOS simulator 构建成功;
|
||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||
|
||
## 2026-10-21 K97.1 剧场搜索框圆角改小
|
||
|
||
- 已从最新 `origin/develop` 创建 `fix/k97.1-theater-search-radius`。
|
||
- 仅将剧场搜索框圆角从 22 调整为 12,高度 44、颜色、聚焦态及
|
||
清空/识剧逻辑保持不变,并同步更新对应 widget 断言。
|
||
|
||
门禁原始输出:
|
||
|
||
```text
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
00:55 +555: All tests passed!
|
||
|
||
$ flutter build apk --debug
|
||
Running Gradle task 'assembleDebug'... 25.8s
|
||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||
```
|
||
|
||
解读:静态分析零告警,555 项全量测试通过,debug APK 构建成功;
|
||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||
|
||
## 2026-10-21 K98 修复登录与手机号登录键盘遮挡
|
||
|
||
- 已完整读取 K98 `docs/plans/INBOX.md`。
|
||
- 已从最新 `origin/develop` 创建 `fix/k98-auth-keyboard`。
|
||
- 计划见 FruitServer `docs/plans/2026-10-21-K98-auth-keyboard.md`。
|
||
- 将统一 viewInsets/channel 有效键盘高度,并给登录页与手机号弹窗增加
|
||
焦点/键盘变化后的字段滚动校正。
|
||
- 已新增 `effectiveKeyboardInset`,兼容 iOS 实时 viewInsets 与 Android
|
||
`adjustNothing` 下的 MethodChannel 键盘高度。
|
||
- 登录/注册页已增加 ScrollController、notifier 监听和邮箱/密码焦点校正;
|
||
手机号弹窗已同样接入手机号/验证码框滚动校正。
|
||
- 已补 iOS 登录/注册、Android channel、手机号验证码框键盘避让测试。
|
||
|
||
门禁原始输出:
|
||
|
||
```text
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
00:52 +559: All tests passed!
|
||
|
||
$ flutter build apk --debug
|
||
Running Gradle task 'assembleDebug'... 26.2s
|
||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||
```
|
||
|
||
解读:静态分析零告警,559 项全量测试通过,debug APK 构建成功;
|
||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||
|
||
## 2026-10-21 K98.1 收藏与观看记录直接进入播放页
|
||
|
||
- 已从最新 `origin/develop` 创建 `fix/k98.1-play-from-lists`。
|
||
- 收藏卡片已改为调用 `playDramaFromCatalog`,不再进入详情页。
|
||
- 观看记录卡片已按 `progress.episodeId` 直达播放页对应集;episodeId 为空时从第 1 集起播。
|
||
- 详情未加载完成的观看记录仍保持原禁用、加载和重试行为。
|
||
- 已补收藏及观看记录直达 PlayerPage 的路由断言。
|
||
|
||
门禁原始输出:
|
||
|
||
```text
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
01:09 +561: All tests passed!
|
||
|
||
$ flutter build apk --debug
|
||
Running Gradle task 'assembleDebug'... 28.7s
|
||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||
```
|
||
|
||
解读:静态分析零告警,561 项全量测试通过,debug APK 构建成功;
|
||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||
|
||
## 2026-10-21 K98.2 修复 feed 更新触发 build 期通知
|
||
|
||
- 已从最新 `origin/develop` 创建 `fix/k98.2-feed-build-notify`。
|
||
- PlayerPage 的 feed 更新改为帧后调度,同一帧多次变化继续由 PlayerLogic 合并。
|
||
- PlayerLogic 在非 idle 调度阶段延后 feed 通知与 PageController 跳页,并给延迟通知去重。
|
||
- HomeLogic.onDramaChanged 在 build/layout/paint 阶段改为帧后通知。
|
||
- 已补 build 阶段 updateFeed、最终 PageController 位置及 HomeLogic 延后通知回归测试。
|
||
|
||
门禁原始输出:
|
||
|
||
```text
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
00:55 +563: All tests passed!
|
||
|
||
$ flutter build apk --debug
|
||
Running Gradle task 'assembleDebug'... 26.4s
|
||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||
```
|
||
|
||
解读:静态分析零告警,563 项全量测试通过,debug APK 构建成功;
|
||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||
|
||
## 2026-10-21 K98.3 修复频道切换复用已释放视频控制器
|
||
|
||
- 已从最新 `origin/develop` 创建 `fix/k98.3-disposed-video-controller`。
|
||
- `PlaybackSession.active` 与 `preparedPlayerAt` 不再暴露 closed/retiring slot;
|
||
`_retire` 先清空活动引用并通知,再等待界面帧边界后暂停和释放播放器。
|
||
- `PlayerLogic._replaceSession` 切换 session 后等待 `endOfFrame`,并再次校验
|
||
revision 后才关闭旧 session;其它 session 回收路径同样使用该帧边界。
|
||
- 已补 retiring player 脱钩单测,以及真实 `PlayerVideoSurface` 经 feed 切换、
|
||
连续 pump 后不出现 disposed controller 异常的回归测试。
|
||
|
||
门禁原始输出:
|
||
|
||
```text
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
00:58 +565: All tests passed!
|
||
|
||
$ flutter build apk --debug
|
||
Running Gradle task 'assembleDebug'... 35.7s
|
||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||
```
|
||
|
||
解读:静态分析零告警,565 项全量测试通过,debug APK 构建成功;
|
||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||
|
||
## 2026-10-22 登录异常改为屏幕居中弹窗
|
||
|
||
- 已从 `origin/develop`(`9b78e43`)创建 `feature/login-error-center-dialog`。
|
||
- 新增 `lib/core/widgets/centered_error_dialog.dart`,统一居中样式、遮罩关闭、确认按钮。
|
||
- 邮箱登录/注册与手机号 OTP/验证码异常改为居中弹窗;字段校验保持内联,成功提示不变。
|
||
- 新增 `authLoginFailed` / `authRegisterFailed` / `authErrorConfirm` 三语言文案并重新生成 l10n。
|
||
- 异常弹窗前提交 busy 已复位,避免 loading 卡在弹窗打开期间。
|
||
|
||
执行命令与原始输出:
|
||
|
||
```text
|
||
$ flutter gen-l10n
|
||
Because l10n.yaml exists, the options defined there will be used instead.
|
||
To use the command line arguments, delete the l10n.yaml file in the Flutter project.
|
||
|
||
$ flutter test --no-pub test/auth/auth_page_test.dart test/auth/phone_auth_sheet_test.dart
|
||
00:02 +20: All tests passed!
|
||
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
00:49 +570: All tests passed!
|
||
```
|
||
|
||
解读:登录异常、注册标题、未知异常回退、本地校验不弹窗、遮罩/按钮关闭和手机号两条
|
||
异常路径均通过;全量静态分析零告警,570 项测试全过。`pubspec.lock` 已还原,
|
||
未启停服务,未操作真机。
|
||
|
||
## 2026-10-22 登录异常调整为中心吐司
|
||
|
||
- 已从 `develop`(`11e37a9`)创建 `feature/login-error-center-toast`。
|
||
- 删除 AlertDialog 组件,新增 OverlayEntry 居中吐司:淡入淡出、约 2 秒消失、不拦截手势。
|
||
- 吐司保持全局单例,新消息替换旧消息;邮箱与手机号异常路径均已切换。
|
||
- 本地表单校验继续内联,手机号验证码发送成功 SnackBar 保持不变。
|
||
- 清理 `authLoginFailed` / `authRegisterFailed` / `authErrorConfirm` 并重新生成 l10n。
|
||
|
||
执行命令与原始输出:
|
||
|
||
```text
|
||
$ flutter gen-l10n
|
||
Because l10n.yaml exists, the options defined there will be used instead.
|
||
To use the command line arguments, delete the l10n.yaml file in the Flutter project.
|
||
|
||
$ flutter test --no-pub test/core/centered_toast_test.dart
|
||
00:00 +3: All tests passed!
|
||
|
||
$ flutter test --no-pub test/auth/auth_page_test.dart test/auth/phone_auth_sheet_test.dart
|
||
00:02 +20: All tests passed!
|
||
|
||
$ dart analyze lib test
|
||
Analyzing lib, test...
|
||
No issues found!
|
||
|
||
$ flutter test --no-pub
|
||
01:00 +573: All tests passed!
|
||
```
|
||
|
||
解读:吐司单例替换、点击穿透和自动消失通过;认证异常与本地校验路径通过;
|
||
全量静态分析零告警,573 项测试全过。`pubspec.lock` 已还原,未启停服务,
|
||
未操作真机。
|