diff --git a/docs/plans/2026-10-21-K86.22-composer-safearea.md b/docs/plans/2026-10-21-K86.22-composer-safearea.md new file mode 100644 index 0000000..06324a5 --- /dev/null +++ b/docs/plans/2026-10-21-K86.22-composer-safearea.md @@ -0,0 +1,45 @@ +# K86.22 评论输入浮层去除底部安全区位移实施计划 + +## 目标 + +修复 Android 收起评论输入键盘后,`SafeArea` 引入底部手势条 padding,导致输入区上移约 48px 的问题。输入区位置只由固定 `_pinnedKeyboardInset` 决定,键盘收起前后保持像素级一致。 + +## 根因 + +- 输入面板 Material 内使用 `SafeArea(top: false)`。 +- 键盘可见时系统导航栏被 IME 覆盖,`MediaQuery.padding.bottom` 为 0。 +- 键盘收起后手势条 padding 恢复,`SafeArea` 自动追加约 48px 底部内边距,把输入区顶高。 +- K86.19 的白色实底和固定 12px 内容内边距本身正常,问题仅来自额外安全区。 + +## 范围 + +- ReelShort `lib/pages/player/widgets/comment_composer_sheet.dart` +- ReelShort `test/comment/drama_comments_sheet_test.dart` +- FruitServer `docs/plans/PROGRESS.md` + +## 实现计划 + +1. 面板 `SafeArea` 设置 `bottom: false`,不再消费 `MediaQuery.padding.bottom`。 +2. 保持 `Positioned(bottom: 0)`、白色 Material 铺到屏幕底部、顶部圆角 20。 +3. 键盘区域继续由内部 `Padding(bottom: _pinnedKeyboardInset)` 决定,内容区底部保持固定 12。 +4. 透明外部点击或发表成功仍为关闭入口;返回键/IME 下箭头只收键盘。 + +## 测试计划 + +- 先新增失败测试:视口 390×844,键盘弹起时 `viewInsets.bottom=180`、`padding.bottom=0`,记录输入框全局矩形。 +- 收起键盘时同时设置 `viewInsets.bottom=0`、`padding.bottom=48`,断言输入框 top、bottom、height 偏移均小于 0.1。 +- 旧实现预期因 SafeArea 多出 48px 而失败;修复后运行完整评论面板测试、静态分析和全量 Flutter 测试。 + +## 风险与处理 + +- 关闭底部 SafeArea 后,输入内容依赖固定 12px 底部内边距;与 K86.19 白色实底填充一致,不再叠加系统手势条。 +- 面板本身仍延伸到屏幕底部,视觉圆角和白底不受影响。 +- 不改 KeyboardInsetNotifier、pinned 稳定捕获、关闭规则或评论列表布局。 + +## Git + +- ReelShort 从 `develop` 创建 `fix/composer-safearea`。 +- 提交:`fix(player): 去除评论输入面板安全区导致的收键盘位移`。 +- 作者:`Zhou Weidong <502333560@qq.com>`。 +- `--no-ff` 合回 `develop` 并 push,不使用 force push,不执行 `git add -A`。 +- FruitServer 追加 PROGRESS 留痕;不安装真机,完成后等待用户验收。 diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index c73e351..ca6fb79 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -23569,3 +23569,26 @@ $ flutter test --no-pub ``` 解读:ReelShort 静态检查零告警,513 条测试全部通过。未安装真机,等待用户验收。 + +## 2026-10-21 ReelShort:K86.22 评论输入浮层去除底部安全区位移 + +- 功能分支:`fix/composer-safearea`,从 ReelShort develop `036bd29` 创建。 +- 功能提交:`3fbfa9a fix(player): 去除评论输入面板安全区导致的收键盘位移`。 +- develop 合并提交:`d39d8d4 merge: 合并 K86.22 评论输入面板安全区修复`,已推送 `036bd29..d39d8d4`。 +- 根因是输入面板 Material 内的 `SafeArea(top: false)` 会消费底部手势条 padding:键盘弹起时 `MediaQuery.padding.bottom` 为 0,收起后恢复 48px,SafeArea 因此把输入区额外顶高 48px。 +- 面板改为 `SafeArea(top: false, bottom: false)`,不再依赖 `MediaQuery.padding.bottom`;输入区位置仅由 `Padding(bottom: _pinnedKeyboardInset)` 和固定内容内边距 12 决定。 +- 保持白底 Material 铺到屏幕底部、顶部圆角 20、紧凑输入区、透明外部点击和发表成功关闭规则。 +- 新增测试模拟键盘弹起 `viewInsets.bottom=180/padding.bottom=0`,收起后 `viewInsets.bottom=0/padding.bottom=48`。旧实现红灯为 expected top `560.0`、actual `512.0`,上移 48px;修复后输入框 top、bottom、height 偏移均小于 0.1。 + +门禁原始输出: + +```text +$ dart analyze lib test +Analyzing lib, test... +No issues found! + +$ flutter test --no-pub +00:49 +514: All tests passed! +``` + +解读:ReelShort 静态检查零告警,514 条测试全部通过。未安装真机,等待用户验收。