docs: 记录 K97 iOS 评论键盘避让
This commit is contained in:
1 parent
652ef050ee
commit
5704f80929
2 files changed
+100
No files matched your search
@@ -0,0 +1,64 @@
|
||||
# K97 修复 iOS 评论输入弹窗键盘避让
|
||||
|
||||
## 目标
|
||||
|
||||
- iOS 评论输入浮层实时跟随 `MediaQuery.viewInsets.bottom`,确保输入框与发表按钮
|
||||
位于键盘上方。
|
||||
- Android 保留既有 MethodChannel + 80ms 防抖 pinned 策略,不恢复底部 SafeArea,
|
||||
避免键盘收起时 48px 抖动回归。
|
||||
- 聚焦、`TextInput.show` 兜底和发表成功提示逻辑不变。
|
||||
|
||||
## 分支
|
||||
|
||||
- ReelShort:`fix/k97-ios-comment-keyboard`,从最新 `origin/develop` 创建。
|
||||
- FruitServer 仅写计划与 PROGRESS 留痕,不改后端功能代码。
|
||||
|
||||
## A. 平台区分
|
||||
|
||||
- `_isAndroid = !kIsWeb && defaultTargetPlatform == TargetPlatform.android`。
|
||||
- Android:
|
||||
- 继续监听 `KeyboardInsetNotifier`。
|
||||
- 继续使用 80ms 防抖后的 `_pinnedKeyboardInset`。
|
||||
- iOS / 其他平台:
|
||||
- 不读取 pinned/channel 值。
|
||||
- `build` 中直接读取 `MediaQuery.viewInsetsOf(context).bottom`。
|
||||
- inset 超过屏幕高度 60% 时按 0 处理,负值归零。
|
||||
|
||||
## B. 面板布局
|
||||
|
||||
- 面板主体使用 `AnimatedPadding`,只设置 bottom:
|
||||
- `duration: 160ms`
|
||||
- `curve: Curves.easeOutCubic`
|
||||
- Android 使用 pinned 值。
|
||||
- iOS / 其他平台使用实时 viewInsets。
|
||||
- Material 仍铺到屏幕底部,用于键盘收起后的实色填充。
|
||||
- Android 不包裹 SafeArea。
|
||||
- iOS / 其他平台包裹 `SafeArea(top: false)`,保留 home indicator 底部避让。
|
||||
|
||||
## C. 测试
|
||||
|
||||
- iOS + `viewInsets.bottom=300`:
|
||||
- 键盘避让 AnimatedPadding 的 bottom 为 300。
|
||||
- `comment-composer-post` 底边位于屏幕高度减 300 之上。
|
||||
- iOS + `viewInsets=0`:padding 为 0。
|
||||
- Android 既有 pinned/channel、焦点、弹出、关闭、发布用例保持通过。
|
||||
- 所有平台 override 测试结束恢复
|
||||
`debugDefaultTargetPlatformOverride = null`。
|
||||
|
||||
## 门禁
|
||||
|
||||
- `dart analyze lib test`
|
||||
- `flutter test`
|
||||
- `flutter build apk --debug`
|
||||
- `flutter build ios --simulator --no-codesign`
|
||||
|
||||
## Git
|
||||
|
||||
- ReelShort 提交:`fix(comment): 修复 iOS 评论输入弹窗键盘避让`
|
||||
- 作者 `Zhou Weidong <502333560@qq.com>`;禁止 `git add -A`。
|
||||
- `--no-ff` 合回 `develop` 并 push,两仓库 PROGRESS 留痕。
|
||||
|
||||
## 约束
|
||||
|
||||
- 全程中文;不改后端、ReelShortWeb、specs。
|
||||
- 不安装或操作真机;完成后停住等待验收。
|
||||
@@ -24292,3 +24292,39 @@ Running Gradle task 'assembleDebug'... 24.8s
|
||||
解读:FruitServer 全部 14 个 Reactor 模块通过,app-api 99 项测试全过;
|
||||
ReelShort 静态分析零告警、553 项测试全过、debug APK 构建成功。
|
||||
`pubspec.lock` 已还原,无依赖变更;未安装或操作真机。
|
||||
|
||||
## 2026-10-21 K97 修复 iOS 评论输入弹窗键盘避让
|
||||
|
||||
- 已完整读取 K97 `docs/plans/INBOX.md`。
|
||||
- 已从最新 `origin/develop` 创建 ReelShort `fix/k97-ios-comment-keyboard`。
|
||||
- 已先写计划 `docs/plans/2026-10-21-K97-ios-comment-keyboard.md`:
|
||||
Android 保留 channel + 80ms pinned,iOS/其他平台实时读取 viewInsets,
|
||||
面板使用 160ms AnimatedPadding,并按平台处理 SafeArea。
|
||||
- 不改后端、ReelShortWeb、specs;不安装或操作真机。
|
||||
- 已完成平台分流:Android 继续使用 pinned/channel;iOS/其他平台 build 中实时读取
|
||||
`MediaQuery.viewInsetsOf(context).bottom`,超过屏幕 60% 时归零。
|
||||
- 面板已改为 160ms `easeOutCubic` AnimatedPadding;Android 不包裹 SafeArea,
|
||||
iOS/其他平台使用 `SafeArea(top: false)` 保留底部安全区。
|
||||
- 已补 iOS viewInsets 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` 已还原,无依赖变更,未安装或操作真机。
|
||||
Reference in new issue
Block a user