# 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。 - 不安装或操作真机;完成后停住等待验收。