docs(plans): 记录 K86.22 评论输入面板安全区修复

This commit is contained in:
Zhou Weidong committed 2026-10-21 15:01:58 +08:00
1 parent e6b5b904fc
commit c7e5de5f99
2 files changed
+68

No files matched your search

@@ -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 留痕;不安装真机,完成后等待用户验收。
+23
View File
@@ -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 条测试全部通过。未安装真机,等待用户验收。