Files

5.0 KiB
Raw Permalink Blame History

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 设计稿,按“视觉统一 + 可用性”执行;不引入图片资源。
  • 当前无产品歧义;若真机出现键盘安全区差异,由用户提供设备侧截图后再做最小修正。