2.8 KiB
2.8 KiB
2026-10-19 K21 登录页 UI 优化
基线
- ReelShort
develop:e44fbdf - FruitServer
develop:af28161 - 只改
ReelShort/lib/pages/auth/**、l10n 与必要的新增测试。
布局方案
- 用
LayoutBuilder + SingleChildScrollView + ConstrainedBox + Center, 让品牌与卡片在可视区域垂直居中,键盘弹起时仍可滚动。 - 保留
auth-scroll,底部 padding 继续使用28 + viewInsets.bottom。 - 返回按钮移到顶部
Positioned + SafeArea浮层,不再占据内容流。 - 内容最大宽度继续为 440,页面左右边距 16。
- 保留主 background glow(alpha ≤0.18),新增独立 Key 的 warm glow(alpha ≤0.06)。
品牌与卡片
- 品牌区居中竖排:48×48 splash mark、App 名 26/w800、tagline 14/blueSoft。
auth-brand、auth-brand-mark保留,mark 尺寸严格 48×48。- 卡片结构保持:模式切换 → 标题 25/w800 → 副标题 → 字段 → 错误胶囊 → 提交。
- 登录继续使用
authSubtitle;注册使用新增authSignUpSubtitle。 - 注册态密码框下显示 12px 的
authPasswordHint,登录态隐藏。
字段错误与交互
AuthLogic增加fieldError;validate()记录具体错误,输入变化或切换模式时清除。- 邮箱/密码字段按
fieldError使用 1.5px semantic errorerrorBorder/focusedErrorBorder。 - 保留
auth-error-capsule、auth-error的文案、圆角 12 和 alpha 0.1。 _submit()首行 busy 短路;异步 catch 中的setState前检查 mounted。- 密码框 done 提交仍走同一
_submit(),busy 时自然忽略。 - 提交按钮增加极淡辣椒红阴影,背景和按下色保持不变。
不可变清单
auth-brand-mark 48x48
auth-card radius 20 / border outlineVariantDark / width 1
input height 52 / radius 14 / fill bar / focus blue 1.5
submit height 52 / radius 26 / blue / bluePressed
auth-enter-animation <=220ms / tween 0 -> 1
mode switch keys, hidden compatibility copy
error capsule radius 12 / alpha 0.1 / semantic color
small screen 320x568 + keyboard 260 scroll reachability
TDD
- 新增测试:注册副标题、注册态密码提示、登录态不显示提示、字段错误红框。
- 先确认红灯。
- 补
authSignUpSubtitle三语并生成 l10n。 - 调整 AuthLogic、表单字段、品牌和页面布局。
- 跑两份既有 Auth 测试与新增测试,再跑全量门禁。
门禁
dart analyze lib test
flutter test
flutter build apk --debug
风险
- 居中布局与小屏滚动会互相影响,必须保持
auth-submit可滚动到。 - 字段红框不能通过 errorText 增加字段高度,否则会破坏 52 高度断言。
- 品牌改为图片资源后仍必须保持
auth-brand-mark为 48×48。 - 不改接口、后端、Web、specs、main;真机由用户验收。