Files
platforms/docs/13-移动端Design-System.md

7.6 KiB
Raw Blame History

移动端 Design System

1. 目标与边界

本规范是 apps/user_appapps/service_app 的移动端视觉单一事实来源。目标是让新增页面默认满足 Material 3、iOS/Android 适配、暗色模式、无障碍和安全业务表达要求,同时避免两端复制主题后独立漂移。

Design System 负责:

  • 品牌色、中性色、安全语义色、字体、间距、圆角、尺寸、动效和断点。
  • Material 3 主题与无业务状态的展示组件。
  • 页面层级、列表、表单、反馈、导航和安全提示的视觉规则。

Design System 不负责:

  • 权限判断、任务状态机、金额计算、设备控制结果或风险等级判定。
  • API DTO、领域模型、Repository、缓存或离线补传。
  • 将尚未落地的业务能力包装成静态成功页面。

实现源位于 apps/heqi_design_system。业务 App 的 ui/core 仅保留兼容适配或业务专用组件,不得复制公共主题实现。

2. 设计原则

  1. 安全可信:红色只用于危险、失败、阻断和破坏性操作;请求成功不能伪装成设备执行成功。
  2. 内容优先:通过字号、留白和对比建立层级,避免依靠 Card 堆叠。
  3. 平台原生:优先使用 Material/Cupertino 可访问控件,支持系统返回、字体缩放和 Safe Area。
  4. 语义驱动:页面使用 ColorScheme、TextTheme 和公共组件,不读取裸色值。
  5. 渐进披露:现场作业、注册和退款等复杂流程分组展示,错误紧邻问题并提供恢复入口。
  6. 双端一致、品牌有别:中性色、安全色和组件行为共享;用户端使用安全蓝,服务端使用作业靛蓝。

3. Tokens

3.1 Color

Token Light 用途
consumerPrimary #2563EB 用户端品牌、主要操作
servicePrimary #4F46E5 服务端品牌、主要操作
success #16875D 已通过、已确认、完成
warning #B86400 待处理、未配置、临近风险
danger #C7352A 危险、失败、阻断、删除
lightBackground #F7F8FA 亮色页面背景
darkBackground #0B1220 暗色页面背景
darkSurface #111827 暗色内容表面

业务页面不得使用 Colors.red/green/orange 或裸 Color(0x...) 表达状态。状态必须同时包含文字或图标,不能只依赖颜色。

3.2 Typography

不绑定网络字体,使用 iOS/Android 系统中文字体回退。所有页面使用 Material 3 类型角色:

Role Size/Line height Weight 用途
displaySmall 32/40 700 关键金额与核心结果
headlineMedium 28/36 700 页面主标题
headlineSmall 24/32 700 重要状态标题
titleLarge 22/28 600 区块标题
titleMedium 16/24 600 列表标题
bodyLarge 16/24 400 主要正文与表单
bodyMedium 14/22 400 辅助正文
labelLarge 14/20 600 按钮与主要标签
labelSmall 12/16 500 状态与非关键说明

必须支持系统字体放大;正文不低于 14sp12sp 仅用于非关键说明。

3.3 Spacing、Radius、Size

  • 间距:4 / 8 / 12 / 16 / 20 / 24 / 28 / 32 / 40 / 48dp
  • 圆角:10 / 12 / 16 / 20 / 24dp
  • 页面横向边距:紧凑屏 20dp宽屏 28dp。
  • 内容最大宽度720dp。
  • 主要按钮高度52dp。
  • 最小触控区48×48dp满足 Android 48dp 与 iOS 44pt 下限。
  • 底部导航高度72dp并保留系统安全区。

3.4 Motion

  • fast 150ms:按压、焦点、轻量状态。
  • standard 220ms:展开、切换、内容替换。
  • emphasized 300ms:页面级重要状态变化。
  • 动效只表达因果和层级,不使用装饰性无限动画。
  • 必须尊重系统 Reduced Motion加载动画除外。

4. 组件规则

4.1 Layout

  • HeqiGutter:统一页面宽度和自适应边距。
  • HeqiSectionHeader:区块标题、说明与可选尾部操作。
  • HeqiSurfaceSection:同组内容容器;普通设置项放入同一个 Section不得每行单独 Card。
  • 独立可点击业务实体可以使用 Card但同一屏不宜连续出现超过三个同权重 Card。

4.2 Status and feedback

  • HeqiStatusPill:短状态标签,必须使用语义 tone。
  • HeqiMessageState:空、错、不可用状态;错误应提供恢复动作。
  • 高风险事件、自动关阀和禁止作业应使用独立 Safety Banner包含原因、影响、状态和下一步。
  • 超过 300ms 的操作显示加载反馈;提交期间按钮禁用并保持尺寸稳定。

4.3 Forms

  • 每个字段必须有可见 Label复杂字段提供 Helper Text。
  • 错误显示在对应字段附近,说明原因与修复方法。
  • 密码字段提供显示/隐藏;手机号、验证码、密码使用对应系统键盘和 Autofill。
  • 长表单应保存草稿,离开前确认未保存内容。

4.4 Navigation and actions

  • Bottom Navigation 只承载 35 个顶层目的地,图标和文字同时存在。
  • 每屏只设置一个主要 FilledButton次要操作用 OutlinedButton低权重操作用 TextButton。
  • 破坏性操作使用 error 语义色,并与主操作保持至少 20dp 间距。
  • 深层页面不得重复创建顶层 AppBar 或 Bottom Navigation。

5. 页面模式

用户端

  • 登录/注册:品牌区 → 表单 → 单一主操作 → 协议与辅助入口。
  • 首页:页面介绍 → 当前服务/安全概览 → 内容区块。
  • 商城:商品列表为同组 Surface商品是独立 Row价格和购买操作优先于装饰。
  • 订单:顶层 Tab 管理分类,子列表使用 embedded 模式,不嵌套 AppBar。
  • 我的:身份概览 → 资产概览 → 账户与服务列表 → 独立退出操作。

服务端

  • 作业前检查:准入总结果 → 检查项列表 → 单一进入/打卡操作。
  • 任务列表:岗位概览 → 任务数量 → 可扫描的任务 Row。
  • 任务详情:任务状态 → 服务信息 → 主流程操作 → 独立异常操作。
  • 现场取证:安全暂存说明 → 完成进度 → 取证项 → 结论 → 提交。
  • 我的工作台:人员/在岗状态 → 钱包与草稿 → 作业检查 → 独立退出操作。

6. 版本与贡献流程

  1. 在设计评审中说明新增 Token/组件解决的跨页面问题,避免为单页创建公共 API。
  2. 先修改 apps/heqi_design_system,再在两个 App 中验证兼容性。
  3. 新组件必须提供亮色、暗色、禁用、加载、错误和大字体状态。
  4. 公共组件不接收数据库 ID不包含业务状态机不直接访问网络或存储。
  5. 每次变更更新包版本与本规范的“变更记录”。

版本规则:

  • MAJOR删除或重命名 Token/组件、改变公共行为。
  • MINOR新增兼容 Token、组件或品牌主题。
  • PATCH不改变 API 的对比度、布局、语义或缺陷修复。

7. 验收清单

  • flutter analyzeflutter test 在共享包及两个 App 均通过。
  • Android、iOS、Web 至少执行对应构建验证;受环境限制未执行的平台必须说明。
  • 375px 小屏、横屏、平板宽度均无横向溢出。
  • 亮色和暗色分别检查文字、边框、状态和弹层对比度。
  • 大字体下无关键文本截断,读屏顺序与视觉顺序一致。
  • 所有触控目标至少 48dp固定操作不被系统安全区遮挡。
  • 页面中不存在裸状态色、重复主题实现或无解释的禁用操作。

8. 变更记录

版本 日期 内容
0.1.0 2026-08-10 建立共享 Flutter 包、双品牌 Material 3 主题、基础 Token 与布局/状态组件。