Files
FruitServer/docs/plans/2026-10-21-K97-ios-comment-keyboard.md

2.2 KiB
Raw Permalink Blame History

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