From 5704f809292c77526d2f139bdd8815fe87b73656 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Wed, 21 Oct 2026 18:46:50 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=AE=B0=E5=BD=95=20K97=20iOS=20?= =?UTF-8?q?=E8=AF=84=E8=AE=BA=E9=94=AE=E7=9B=98=E9=81=BF=E8=AE=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-10-21-K97-ios-comment-keyboard.md | 64 +++++++++++++++++++ docs/plans/PROGRESS.md | 36 +++++++++++ 2 files changed, 100 insertions(+) create mode 100644 docs/plans/2026-10-21-K97-ios-comment-keyboard.md diff --git a/docs/plans/2026-10-21-K97-ios-comment-keyboard.md b/docs/plans/2026-10-21-K97-ios-comment-keyboard.md new file mode 100644 index 0000000..970c51f --- /dev/null +++ b/docs/plans/2026-10-21-K97-ios-comment-keyboard.md @@ -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。 +- 不安装或操作真机;完成后停住等待验收。 diff --git a/docs/plans/PROGRESS.md b/docs/plans/PROGRESS.md index 9d3bb37..8098290 100644 --- a/docs/plans/PROGRESS.md +++ b/docs/plans/PROGRESS.md @@ -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` 已还原,无依赖变更,未安装或操作真机。