# 开发进度 ## 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` 已还原,无依赖变更,未安装或操作真机。