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