Files

103 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-10-17 K6 客户端 UI:登录页 + 底部导航优化
## 一、目标与边界
本批只优化 Flutter 登录页和首页底部导航,基于 K5 克莱因蓝主题:
- K6-A:登录页品牌区、autofill、密码显隐、键盘 next/done 提交、
提交中禁用、主题语义错误色、小屏键盘可用性。
- K6-B:底部导航背景/边框/选中态统一使用 K5 token,安全区适配,
点击区域 ≥48pt,切换动效 ≤200ms。
- K6-C:新增可注入 `Haptics` 封装,只对关键操作提供 selection/light/medium 反馈。
- K6-D:新增 widget 测试并保持既有 Key、导航逻辑与沉浸隐藏行为。
不做忘记密码、Google/Apple 登录、隐私勾选、新 tab、页面信息架构调整;
不改接口、业务校验、注册/登录流程、后端、Web 或 specs。
## 二、设计口径
- 主色:`AppColors.blue = #002FA7`。
- 按下态/大面积激活背景:`AppColors.bluePressed = #00227A`。
- 深色底高亮:`AppColors.blueSoft = #5B7BE0`。
- 主色上的文字/图标:`AppColors.onPrimary = #FFFFFF`。
- 错误提示使用 `ColorScheme.error/onError` 对应语义色。
- 底栏背景使用现有 `AppColors.bar`,顶部边框使用主题 outline 或现有暗色 token;
页面不新增色值字面量。
## 三、预计影响文件
- `lib/pages/auth/auth_view.dart`
- `lib/pages/home/home_view.dart`
- `lib/core/platform/haptics.dart`
- `lib/app.dart`(Haptics Provider)
- 收藏、点赞、评论、举报、下载、记录相关页面回调
- `lib/l10n/app_{en,zh,id}.arb` 与生成文件
- `test/auth/auth_page_test.dart`
- `test/widget_test.dart`
- 必要时补首页导航专用测试文件
不修改 `HomeLogic` 的 tab 顺序、选中规则和 Key;不动播放页沉浸状态来源。
## 四、交互与可用性
### 登录页
- 品牌区显示 App 名和印尼市场副标题,全部走 l10n 三语。
- 邮箱 `TextInputAction.next`,提交后焦点进入密码框。
- 密码 `TextInputAction.done`,提交后直接执行现有 `_submit()`。
- 邮箱 `AutofillHints.email`,密码 `AutofillHints.password`。
- 密码显隐按钮语义标签走 l10n,所有点击区域 ≥44pt。
- `busy` 时禁用两个输入框、显隐按钮、提交和模式切换。
- 使用 `resizeToAvoidBottomInset` + ListView/SafeArea,保证小屏键盘下
submit 可滚动到可见区域。
### 底部导航
- 保持 4 个 tab 的数量、顺序、Key 和回调不变。
- 选中态采用克制的背景胶囊(现有方案收敛)或短指示条,二选一即可;
使用 `bluePressed` 胶囊 + `blueSoft` 高亮文字/图标。
- 底栏高度 + SafeArea bottom 适配 home indicator。
- 每个 tab 的可点击区域至少 48pt;动效控制在 200ms 内。
- `logic.videoImmersive == true` 时保持 `bottomNavigationBar: null`。
### 点击震动反馈
- 使用 Flutter 内置 `HapticFeedback`,统一封装为 `Haptics` 抽象 +
`FlutterHaptics` 默认实现,通过 Provider 注入,测试使用 fake。
- tab 真正切换:`selectionClick()`。
- 登录/注册提交、收藏/取消、点赞/取消、评论发送、举报提交、下载授权申请:
`lightImpact()`。
- 清空记录、清空下载、删除记录/授权:`mediumImpact()`。
- 全部 `unawaited`;平台不可用时默认实现静默忽略;普通列表/滚动/页面切换不触发。
## 五、TDD 顺序
1. 新增登录页密码显隐、autofill、next/done 焦点、busy 禁用、错误语义色测试。
2. 新增底栏 4 Key、tab 切换选中态、沉浸隐藏、最小点击区域和硬编码色扫描测试。
3. 新增 fake Haptics 测试,覆盖 tab selection、主操作 light、危险操作 medium、
普通列表不触发与默认实现异常静默。
4. 先运行定向测试确认红灯,再实现登录页、底栏与 Haptics 转绿。
5. 补 320×568 小屏与键盘弹出回归。
6. 全量门禁:`dart analyze lib test`、`flutter test`、
`flutter build apk --debug`。
## 六、风险与处理
- 登录页已有业务逻辑较长:仅提取品牌区和表单展示组件,不改
`AuthLogic`、接口调用与校验规则。
- 键盘焦点流转依赖 `FocusNode`:显式创建并释放,测试使用
`tester.testTextInput.receiveAction(TextInputAction.next/done)`。
- busy 状态下测试请求不能立即返回:使用可控 Fake Auth 或延迟 Future,
验证输入和按钮禁用,再释放请求避免测试悬挂。
- 底栏新增动画可能影响既有 `pumpAndSettle`:统一使用 ≤200ms,
不引入第三方动画库。
- Haptics 注入遗漏会让页面测试缺少 Provider:所有直接 pump 页面的测试
统一注入 fake;生产默认实现吞掉平台不可用异常,不影响业务。
- 安全区/小屏可能压缩按钮高度:使用最小点击区约束与
`SafeArea(minimum: ...)`,保持现有 Key 可定位。
## 七、待确认
- specs 无 UI 设计稿,按“视觉统一 + 可用性”执行;不引入图片资源。
- 当前无产品歧义;若真机出现键盘安全区差异,由用户提供设备侧截图后再做最小修正。