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

160 lines
7.6 KiB
Markdown
Raw 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.
# 移动端 Design System
## 1. 目标与边界
本规范是 `apps/user_app``apps/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 analyze``flutter test` 在共享包及两个 App 均通过。
- Android、iOS、Web 至少执行对应构建验证;受环境限制未执行的平台必须说明。
- 375px 小屏、横屏、平板宽度均无横向溢出。
- 亮色和暗色分别检查文字、边框、状态和弹层对比度。
- 大字体下无关键文本截断,读屏顺序与视觉顺序一致。
- 所有触控目标至少 48dp固定操作不被系统安全区遮挡。
- 页面中不存在裸状态色、重复主题实现或无解释的禁用操作。
## 8. 变更记录
| 版本 | 日期 | 内容 |
| --- | --- | --- |
| 0.1.0 | 2026-08-10 | 建立共享 Flutter 包、双品牌 Material 3 主题、基础 Token 与布局/状态组件。 |