2.5 KiB
2.5 KiB
K98 修复登录与手机号登录键盘遮挡
目标
- 登录/注册页在邮箱或密码框聚焦后,自动滚动到键盘上方。
- 手机号登录弹窗的手机号/验证码框同样保持可见。
- Android
adjustNothing下通过既有 MethodChannel 获取键盘高度,iOS 使用实时MediaQuery.viewInsets。
分支
- ReelShort:
fix/k98-auth-keyboard,从最新origin/develop创建。 - FruitServer 仅写计划与 PROGRESS 留痕,不改后端功能代码。
A. 有效键盘高度
在 keyboard_inset.dart 增加:
double effectiveKeyboardInset(
BuildContext context,
KeyboardInsetNotifier notifier, {
double maxRatio = 0.6,
});
- 取 MediaQuery viewInsets 与 Android channel 逻辑像素值的最大值。
- Web/非 Android 不读取 channel。
- 超过屏幕高度 60% 时按 0 处理,负值/非法值归零。
B. AuthPage
initState启动KeyboardInsetNotifier,监听并用 setState 刷新。SingleChildScrollView增加ScrollController。- 底部 padding 使用固定底部留白 + effectiveKeyboardInset。
- 邮箱/密码 FocusNode 监听焦点;聚焦或键盘高度变化后:
- 通过 FocusNode.context 的 RenderBox 获取字段全局底边。
- 与屏幕高度 - 键盘高度 - 24 比较。
- 被遮挡时用 200ms easeOutCubic animateTo 补足滚动。
resizeToAvoidBottomInset保持 false。
C. PhoneAuthSheet
- 接入 KeyboardInsetNotifier 和 ScrollController。
- 底部 padding 改用 effectiveKeyboardInset。
- 手机号/验证码 FocusNode 增加与 AuthPage 相同的焦点/键盘变化滚动校正。
- 保持现有 SingleChildScrollView、弹窗和返回键行为。
D. 测试
- iOS viewInsets=300:登录密码框、注册密码框均在键盘上方。
- Android platform + MethodChannel 键盘高度:密码框仍在键盘上方。
- iOS:手机号弹窗验证码框在键盘上方。
- 所有平台 override 测试返回前显式恢复
debugDefaultTargetPlatformOverride = null。
门禁
dart analyze lib testflutter testflutter build apk --debug
Git
- ReelShort 提交:
fix(auth): 登录注册与手机号登录键盘避让 - 作者
Zhou Weidong <502333560@qq.com>;禁止git add -A。 --no-ff合回develop并 push,两仓库 PROGRESS 留痕。
约束
- 全程中文;不改后端、ReelShortWeb、specs。
- 不改评论输入框已验证的 Android pinned 策略。
- 不安装或操作真机;完成后停住等待验收。