merge: 合并 K98 客户端修复留痕
This commit is contained in:
commit
97c2153c2e
2 files changed
+105
No files matched your search
@@ -0,0 +1,73 @@
|
||||
# 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 策略。
|
||||
- 不安装或操作真机;完成后停住等待验收。
|
||||
@@ -24328,3 +24328,35 @@ Xcode build done. 44.0s
|
||||
|
||||
解读:静态分析零告警,555 项全量测试通过,Android 与 iOS simulator 构建成功;
|
||||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||||
|
||||
## 2026-10-21 K98 修复登录与手机号登录键盘遮挡
|
||||
|
||||
- 已完整读取 K98 `docs/plans/INBOX.md`。
|
||||
- 已从最新 `origin/develop` 创建 ReelShort `fix/k98-auth-keyboard`。
|
||||
- 已先写计划 `docs/plans/2026-10-21-K98-auth-keyboard.md`:
|
||||
统一 viewInsets/channel 有效键盘高度,登录/注册和手机号弹窗按字段位置自动滚动。
|
||||
- 不改后端、ReelShortWeb、specs;不安装或操作真机。
|
||||
- 已新增 `effectiveKeyboardInset`:取 MediaQuery viewInsets 与 Android channel
|
||||
逻辑像素最大值,Web/非 Android 忽略 channel,超过屏幕 60% 时归零。
|
||||
- 登录/注册页已接入 notifier、ScrollController 和邮箱/密码焦点校正;
|
||||
仍保持 `resizeToAvoidBottomInset: false`,遮挡时 200ms easeOutCubic 滚动。
|
||||
- 手机号弹窗已使用有效键盘高度,并给手机号/验证码框增加同样的滚动校正。
|
||||
- 已补 iOS 登录/注册、Android channel、手机号验证码框键盘避让测试。
|
||||
|
||||
门禁原始输出:
|
||||
|
||||
```text
|
||||
$ dart analyze lib test
|
||||
Analyzing lib, test...
|
||||
No issues found!
|
||||
|
||||
$ flutter test --no-pub
|
||||
00:52 +559: All tests passed!
|
||||
|
||||
$ flutter build apk --debug
|
||||
Running Gradle task 'assembleDebug'... 26.2s
|
||||
✓ Built build/app/outputs/flutter-apk/app-debug.apk
|
||||
```
|
||||
|
||||
解读:静态分析零告警,559 项全量测试通过,debug APK 构建成功;
|
||||
`pubspec.lock` 已还原,无依赖变更,未安装或操作真机。
|
||||
Reference in new issue
Block a user