Files
ReelShort/docs/plans/PROGRESS.md
T

16 KiB
Raw Blame History

开发进度

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 测试。

门禁原始输出:

$ 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 既有用例全部通过。

门禁原始输出:

$ 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 断言。

门禁原始输出:

$ 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、手机号验证码框键盘避让测试。

门禁原始输出:

$ 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 的路由断言。

门禁原始输出:

$ 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 延后通知回归测试。

门禁原始输出:

$ 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 异常的回归测试。

门禁原始输出:

$ 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 卡在弹窗打开期间。

执行命令与原始输出:

$ 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。

执行命令与原始输出:

$ 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 已还原,未启停服务, 未操作真机。

2026-10-22 播放器 loading 与锁定进度条调整

  • 已从 develop(7b068e8)创建 feature/player-loading-polish。
  • 播放器票据与 session loading 圈统一为 24×24、线宽 2。
  • loading 高光默认改为白色,普通轨道色与首页 white24 轨道保持不变。
  • 首页和全屏播放器进度条增加 locked 状态;锁定态显示静态 inactive 线,不进入 loading, 禁用拖动与 seek。
  • 已补 loading 指示器尺寸、缓冲高光颜色、首页/全屏锁定态和锁定轨道高度测试。

执行命令与原始输出:

$ flutter test --no-pub test/player/loading_progress_track_test.dart test/playback/seek_progress_bar_test.dart
00:00 +8: All tests passed!

$ flutter test --no-pub test/home/home_preview_layout_test.dart
00:01 +7: All tests passed!

$ flutter test --no-pub test/player/player_fullscreen_test.dart
00:09 +37: All tests passed!

$ dart analyze lib test
Analyzing lib, test...
No issues found!

$ flutter test --no-pub
00:50 +576: All tests passed!

解读:加载高光、锁定静态轨道、拖动禁用和两个 loading 指示器尺寸均通过; 全量静态分析零告警,576 项测试全过。pubspec.lock 已还原,未启停服务, 未操作真机。

2026-10-22 屏幕常亮与前台自动续播

  • 已从 develop(5bf1022)创建 feature/keep-awake-auto-resume。
  • Android 主 Activity 添加 FLAG_KEEP_SCREEN_ON,保留已有渠道、PiP 和键盘逻辑。
  • iOS AppDelegate 开启 isIdleTimerDisabled,前台保持常亮。
  • 用户主动暂停后回前台安全恢复;过期票据先完成重取再设置播放意图。
  • locked、blocked、票据错误、会话错误、解锁/浮层遮挡和 PiP 场景不会强制续播。
  • 后台仍立即保存进度并暂停,不做后台播放。

执行命令与原始输出:

$ flutter test --no-pub test/player/player_logic_test.dart
00:00 +35: All tests passed!

$ dart analyze lib test
Analyzing lib, test...
No issues found!

$ flutter test --no-pub
00:50 +580: All tests passed!

解读:用户暂停恢复、过期票据重取、locked/ticketError/浮层阻断及后台保存暂停 均通过;全量静态分析零告警,580 项测试全过。pubspec.lock 已还原, 未启停服务,未操作真机。

2026-10-22 播放位置连续性

  • 已从 develop(fe49c6d)创建 feature/playback-position-continuity。
  • 新增 PlaybackPositionCache,按 episodeId 保存 dramaId、position、duration、updatedAt。
  • App Provider 注入单一缓存实例,PlayerLogic 与详情页共享。
  • 进度监听、保存进度与进入详情前更新缓存;loadResumePoint 优先缓存,未命中再回源。
  • 详情页继续观看与 CTA 优先使用最近缓存集,返回首页保持当前播放器位置。
  • 跨剧缓存不命中;片尾保护继续复用 clampResumePosition。

执行命令与原始输出:

$ flutter test --no-pub test/playback/playback_position_cache_test.dart
00:00 +4: All tests passed!

$ flutter test --no-pub test/player/player_logic_test.dart
00:00 +38: All tests passed!

$ flutter test --no-pub test/player/player_open_detail_test.dart
00:00 +1: All tests passed!

$ dart analyze lib test
Analyzing lib, test...
No issues found!

$ flutter test --no-pub
00:53 +589: All tests passed!

解读:缓存读写/过期、跨剧隔离、缓存命中去网络、服务端回落、详情 CTA 缓存集 和详情往返同秒位置均通过;全量静态分析零告警,589 项测试全过。 pubspec.lock 已还原,未启停服务,未操作真机。

2026-10-22 Seek 后播放位置保持

  • 已从 develop(47ca214)创建 feature/playback-seek-position。
  • 新增播放位置 clamp;缓存、上报与详情返回统一使用 seek 完成后的 controller 位置。
  • PlayerLogic 增加 pending seek 屏障,saveCurrentProgress 与离开路径会等待 seek 和写入完成。
  • 监听器统一读取一次当前播放快照,避免旧位置覆盖新位置。
  • 已补 seek 目标缓存、越界 clamp、seek 后立即进详情并返回的位置测试。

执行命令与原始输出:

$ flutter test --no-pub test/playback/playback_position_cache_test.dart
00:00 +5: All tests passed!

$ flutter test --no-pub test/player/player_logic_test.dart --plain-name should_cache_actual_position_after_seek_completes
00:00 +1: All tests passed!

$ flutter test --no-pub test/player/player_open_detail_test.dart
00:00 +1: All tests passed!

$ dart analyze lib test
Analyzing lib, test...
No issues found!

$ flutter test --no-pub
00:49 +591: All tests passed!

解读:seek 完成后缓存与上报使用实际位置,越界目标被 clamp;seek 后立即 进详情并返回仍保持目标位置。全量静态分析零告警,591 项测试全过。 pubspec.lock 已还原,未启停服务,未操作真机。

2026-10-22 播放入口无缓冲提示

  • 已从 Seek 修复合并后的 develop(f302b39)创建 feature/playback-entry-no-buffer。
  • 未初始化进度条改为静态 inactive 轨道,不显示流动高光且不可拖动。
  • 仅 initialized 且 isBuffering 持续超过 350ms 时显示白色缓冲高光。
  • PlayerView 删除 session 居中 loading,只保留 ticket loading。
  • preparePlayer 改为初始化完成后先 seek 缓存位置再 play;详情返回复用原 controller。

执行命令与原始输出:

$ flutter test --no-pub test/playback/seek_progress_bar_test.dart
00:00 +7: All tests passed!

$ flutter test --no-pub test/home/home_preview_layout_test.dart
00:01 +8: All tests passed!

$ flutter test --no-pub test/player/player_logic_test.dart
00:00 +40: All tests passed!

$ flutter test --no-pub test/player/player_fullscreen_test.dart
00:09 +37: All tests passed!

$ dart analyze lib test
Analyzing lib, test...
No issues found!

$ flutter test --no-pub
00:49 +593: All tests passed!

解读:短缓冲不闪、持续缓冲仍显示白色高光;未初始化/入口/返回/重建路径 均无多余 loading,重建顺序为 initialize→seek→play。全量静态分析零告警, 593 项测试全过。pubspec.lock 已还原,未启停服务,未操作真机。