Files
mindfulness/spec_kit/Card UI/spec.md
2026-01-29 23:31:12 +08:00

4.7 KiB
Raw Blame History

Card UI高层规范

1. 背景与目标

当前卡片页Home/情绪卡片滑动页)右上角需要提供两个入口:

  • 切换主题:在「风景」与「颜色」两种主题间切换
  • 个人主页:以弹窗形式打开个人主页(样式与主题弹窗一致的弹窗体系)

本需求聚焦 UI 视觉统一交互逻辑收敛,让用户在卡片页可以快速切换主题、进入个人主页设置与通用入口。

目标

  • 右上角双按钮:两个圆形图标按钮常驻卡片页右上角
  • 主题弹窗:可选择「风景 / 颜色」两种主题,并即时生效
  • 个人主页弹窗:点击进入个人主页弹窗(与主题弹窗同一套弹窗/遮罩/圆角规范)
  • 资源统一:图标资源使用 client/assets/images/home/theme.svgmy.svg

非目标(本阶段不做)

  • 不引入复杂的主题系统(如多套配色、动态主题下载、远端配置等)
  • 不做账号体系/登录注册(个人主页弹窗仅作为本地个人中心入口与设置集合)
  • 不做完整的卡片滑动动效重构(仅限卡片页头部与相关弹窗/局部逻辑优化)

2. 范围与交付物

范围

  • 卡片页Home头部 UI右上角两个圆形 icon 按钮
  • 主题弹窗:展示两种主题选项(风景/颜色)并支持选择
  • 个人主页弹窗:展示个人信息与快捷入口(以弹窗呈现)
  • 主题状态:本地持久化 + 启动后读取 + 在卡片页即时反映

交付物

  • 卡片页头部 UI 更新(两按钮替换/补齐)
  • 主题弹窗与个人主页弹窗的 UI 与交互逻辑(共用弹窗规范)
  • 主题选择的本地存储 key 约定与读写逻辑
  • (可选)补充 i18n key按钮无文本但弹窗标题/选项文案需多语言)

3. 视觉与交互需求

3.1 右上角按钮(主题 / 我的)

  • 位置:卡片页右上角,两个按钮水平排列,间距 812按视觉微调
  • 形状:圆形按钮,背景为浅色圆底(与现有 UI 风格一致),点击区域需足够大(建议 hitSlop >= 10
  • 图标
    • 主题:client/assets/images/home/theme.svg
    • 我的:client/assets/images/home/my.svg
  • 点击反馈:按平台规范(透明度/水波纹)即可

3.2 主题弹窗

  • 打开方式:点击右上角「主题」按钮打开
  • 样式:与现有弹窗体系一致(遮罩 + 圆角容器),可做底部弹窗或中间弹窗,需与设计稿一致
  • 内容
    • 标题:主题
    • 选项:
      • 风景(预览图/缩略图)
      • 颜色(预览图/缩略图)
    • 当前选中项需有明显高亮(描边/勾选/阴影等,按设计稿)
  • 交互
    • 点击选项即切换主题并立即生效
    • 点击遮罩或关闭按钮关闭弹窗

3.3 个人主页弹窗(我的)

  • 打开方式:点击右上角「我的」按钮打开
  • 样式:与主题弹窗同一套弹窗规范(遮罩、圆角、关闭按钮/手势)
  • 内容建议(以现有设计为准)
    • 顶部区域:头像/插画 + 用户昵称(本地默认名或 onboarding 的 name
    • 快捷卡片:我的喜欢、小组件(或其他产品定义入口)
    • 通用列表:每日提醒、隐私政策、使用条款、语言
  • 交互
    • 列表项点击进入对应页面/二级弹窗(实现阶段在 plan/tasks 中细化)
    • 关闭方式同主题弹窗

4. 主题逻辑与状态管理

4.1 主题类型

  • scenery:风景主题(以图片/风景背景为主)
  • color:颜色主题(以纯色/渐变色块为主)

4.2 持久化 Key建议

  • ui.theme.mode: 'scenery' | 'color'

4.3 生效范围(建议)

  • 最低要求:卡片页背景/卡片背景/主题弹窗预览在切换后 立即更新
  • 可扩展:全局统一(如 Settings/我的页)在后续版本做全局 Theme Provider

5. 验收标准

  • 卡片页右上角展示两个圆形图标按钮,点击热区合理
  • 点击主题按钮:
    • 打开主题弹窗,显示「风景/颜色」两项
    • 切换后立即生效并持久化,重新进入 App 仍保持上次选择
  • 点击我的按钮:
    • 打开个人主页弹窗
    • 弹窗样式(遮罩/圆角/关闭)与主题弹窗一致
  • 图标资源从 client/assets/images/home/ 加载,显示清晰无拉伸

6. 风险与注意事项

  • SVG 兼容:需要确认当前项目 SVG 渲染方案(如 react-native-svg / expo 方案),避免不同平台显示差异
  • 路由与弹窗体系:若使用 expo-routerStack modal需要统一交互遮罩、圆角、返回手势以匹配设计
  • 多语言:弹窗标题、列表项文案需走 i18nzh-CN/en/es/pt/zh-TW