鸿蒙原生应用 ArkTS 严格模式实战:课本共享我的页 —— 交易统计与渐变用户卡组合技
鸿蒙原生应用 ArkTS 严格模式实战:课本共享我的页 —— 交易统计与渐变用户卡组合技
App 36「校园课本共享」我的(ProfileTab),主题色
#F2994A琥珀橙。我的页采用"用户卡 + 统计 + 菜单 + About"四区布局——琥珀橙渐变 UserCard(📖 64 半透明圆形头像 + "二手书达人"标题 + "成交 14 笔 · 信用极好"副标题) + 悬浮 StatRow(margin -24 上移 + 6 在售 / 14 已售 / 8 已购 / 12 收藏 4 统计项) + MenuList 5 菜单项(📚 我的课本 / 🔄 交易记录 / ⭐ 我的收藏 / 💰 我的钱包 / ⚙️ 设置,每项含 emoji + 标题 + ">" 箭头 + 0.5px Divider) + 底部 About("校园课本共享" + "Version 1.0.0")。本篇基于36-book-share/entry/src/main/ets/pages/ProfileTab.ets(约 100 行)逐段拆解,附 4 张实机截图。
一、整体结构:四区"用户卡 + 统计 + 菜单 + About"布局
App 36 我的页是"用户信息 + 交易统计 + 菜单导航 + 底部版本"的标准我的页——4 个 @Builder 块:
build() {
Column() {
Scroll() {
Column() {
this.UserCard()
this.StatRow()
this.MenuList()
this.About()
}
.width('100%')
.padding({ bottom: D.pad + this.safeBottom + 20 })
}
.layoutWeight(1).scrollBar(BarState.Off).align(Alignment.Top)
}
.width('100%').height('100%').backgroundColor(C.bg)
}
4 块结构:
- UserCard — 琥珀橙渐变用户卡
- StatRow — 悬浮 4 统计卡
- MenuList — 5 菜单列表
- About — 底部版本信息
与 App 35 我的页对比:
- App 35:4 统计(12/89/24/38)+ 5 菜单(笔记/收藏/下载/成就/设置)
- App 36:4 统计(6/14/8/12)+ 5 菜单(课本/交易/收藏/钱包/设置)
"35 笔记社区 vs 36 二手交易"——"35 获赞成就、36 交易钱包"——"两个学习共享我的"——"35 重内容激励、36 重交易数据"——"我的页的业务差异化"。
"36 我的页含钱包"——"💰 我的钱包"——"交易资金"——"买卖的钱包"——"C2C 交易的核心"——"36 独有的菜单"——"交易资产管理"。
"36 统计含交易数据"——"6 在售 + 14 已售 + 8 已购"——"买卖双视角"——"交易活跃度"——"C2C 交易数据"。
主题色 #F2994A 琥珀橙——同首页/商品/发布——"品牌色贯穿全 App"。

二、UserCard:琥珀橙渐变用户卡
UserCard 是 琥珀橙渐变 + 📖 头像 + 用户名 + 副标题的渐变用户卡:
@Builder
UserCard() {
Row({ space: 14 }) {
Row() { Text('📖').fontSize(32) }
.width(64).height(64).backgroundColor('#33FFFFFF').borderRadius(32).justifyContent(FlexAlign.Center)
Column({ space: 5 }) {
Text('二手书达人').fontSize(18).fontWeight(FontWeight.Bold).fontColor('#FFFFFF')
Text('成交 14 笔 · 信用极好').fontSize(12).fontColor('#FFFFFF').opacity(0.85)
}.alignItems(HorizontalAlign.Start).layoutWeight(1)
}
.width('100%')
.padding({ top: this.safeTop + 30, left: D.pad, right: D.pad, bottom: 44 })
.linearGradient({ angle: 135, colors: [[C.primary, 0.0], [C.accent, 1.0]] })
}
UserCard 结构:
- 外层:琥珀橙 135° 渐变背景(#F2994A → #F5B974)+ 顶部 safeTop + 30 padding + 底部 44 padding
- 内层 Row:64×64 半透明白圆头像(📖 32 号)+ 文字区("二手书达人" 18 号加粗 + "成交 14 笔 · 信用极好" 12 号 0.85 透明)
linearGradient({ angle: 135, colors: [[C.primary, 0.0], [C.accent, 1.0]] })——"琥珀橙 135° 渐变"——"#F2994A → #F5B974"——"系列渐变统一"——"同首页 Banner"。
padding({ top: this.safeTop + 30, bottom: 44 }) 非对称 padding——"顶部安全区 + 底部 44 让位"——"44 = StatRow 悬浮占位"——"负 margin 重叠设计"。
Row().width(64).height(64).backgroundColor('#33FFFFFF').borderRadius(32) 头像——"64×64 半透明白圆"——"#33FFFFFF = 白 20% 透明"——"渐变上的半透明"——"borderRadius 32 = 圆形"。
Text('📖') 32 号书本 emoji——"书本头像"——"📖 = 翻开的书"——"二手书达人"——"emoji 头像"——与 App 35 "✍️"、App 34 "📚" 对比——"业务 emoji 头像"——"头像 = 业务符号"。
Text('二手书达人').fontSize(18).fontWeight(FontWeight.Bold).fontColor('#FFFFFF') 18 号加粗白——"用户名"——"二手书达人 = 身份"——与 App 35 "笔记达人"、App 34 "学习分享者" 对比——"达人/分享者"——"身份命名"——"36 = 交易者"。
Text('成交 14 笔 · 信用极好').fontSize(12).fontColor('#FFFFFF').opacity(0.85) 12 号白 0.85 透明——"副标题"——"成交 14 笔 + 信用极好"——"交易数据 + 信用"——"· 中点分隔"——与 App 35 "分享 12 份获赞 89" 对比——"成交 vs 获赞"——"信用 vs 获赞"——"交易 App 的信任"。
"信用极好" 的信任体系——"交易信用"——"买家信任"——"C2C 交易核心"——"信用 = 成交"——"信用的价值"——"交易安全"。
bottom: 44 底部 44 padding——"悬浮 StatRow 的关键"——"重叠设计"——"负 margin -24"。
与 App 35/34/33/32 UserCard 对比:
| 项目 | App 32 | App 33 | App 34 | App 35 | App 36 |
|---|---|---|---|---|---|
| 渐变 | 晴空蓝 | 青蓝 | 草绿 | 紫罗兰 | 琥珀橙 |
| 头像 | ☂️ | 🚴 | 📚 | ✍️ | 📖 |
| 用户名 | 雨伞用户 | 骑行达人 | 学习分享者 | 笔记达人 | 二手书达人 |
| 副标题 | 信用良好 | 累计减碳 | 共享 18 份获赞 | 分享 12 份获赞 | 成交 14 笔信用极好 |
"五个 App 用户卡"——"伞/车/书/笔/书"——"信用/减碳/获赞/获赞/成交"——"业务的演进"——"36 = 交易 + 信用"——"C2C 交易的信任"。
三、StatRow:4 统计悬浮卡
StatRow 是 margin -24 上移 + 4 统计项的悬浮统计卡:
@Builder
StatRow() {
Row() {
ForEach(this.stats, (s: StatItem) => {
Column({ space: 4 }) {
Text(s.value).fontSize(18).fontWeight(FontWeight.Bold).fontColor(C.text)
Text(s.label).fontSize(11).fontColor(C.textDim)
}.layoutWeight(1)
}, (s: StatItem) => s.label)
}
.width('92%').padding({ top: 14, bottom: 14 })
.backgroundColor(C.card).borderRadius(D.rMd).border({ width: 1, color: C.stroke }).margin({ top: -24 })
}
StatRow 结构:
- 外层 Row:92% 宽 + 14 padding 上下 + 白底 + 14 圆角 + 1px 边框 + margin top -24
- 内层 ForEach:4 个 Column(数值 + 标签)
margin({ top: -24 }) 负 margin 悬浮——"上移 24px"——"与 UserCard 重叠"——"悬浮立体"——"同 App 32-35"——"系列悬浮统一"。
width('92%') 92% 宽——"非满宽"——"两侧 4% 边距"——"卡片感"——"同系列"。
4 个统计项:
| 数值 | 标签 |
|---|---|
| 6 | 在售 |
| 14 | 已售 |
| 8 | 已购 |
| 12 | 收藏 |
"6 在售"——"当前在卖的书"——"商品供给"——"6 本在售"——"与首页 6 书呼应"——"数据一致"。
"14 已售"——"卖出的书"——"历史成交"——"与副标题'成交 14 笔'呼应"——"双处一致"。
"8 已购"——"买过的书"——"买家数据"——"消费记录"——"买卖双视角"。
"12 收藏"——"收藏的书"——"关注商品"——"收藏意向"——"购书意愿"。
"4 项 = 4 维度":供给(6)+ 卖出(14)+ 买入(8)+ 意向(12)——"4 维度的交易画像"——"买卖双视角"——"C2C 交易数据"——"完整交易画像"。
Column({ space: 4 }).layoutWeight(1) 4 等分——"4 项等宽"——"layoutWeight 等权"——"公平展示"。
Text(s.value).fontSize(18).fontWeight(FontWeight.Bold) 18 号加粗黑数值——"数值焦点"——"6/14/8/12"——"纯数字"。
Text(s.label).fontSize(11).fontColor(C.textDim) 11 号灰标签——"标签次要"——"11 号小字"。
`StatItem 接口(2 字段):
interface StatItem { value: string; label: string; }
2 字段极简模型——"value + label"——"同 App 32-35"——"模型复用"。
与 App 35 StatRow 对比——"12/89/24/38 vs 6/14/8/12"——"两 App 4 统计"——"35 内容数据、36 交易数据"——"统计 = 业务核心"。

四、MenuList:5 菜单列表
MenuList 是 5 个菜单项 + Divider 的菜单列表:
@Builder
MenuList() {
Column() {
ForEach(this.menus, (m: MenuItem, idx: number) => {
Row({ space: 12 }) {
Text(m.emoji).fontSize(18)
Text(m.title).fontSize(14).fontColor(C.text).layoutWeight(1)
Text('>').fontSize(14).fontColor(C.textDim)
}
.width('100%').padding({ left: 14, right: 14, top: 14, bottom: 14 })
.onClick(() => { promptAction.showToast({ message: m.title }); })
if (idx < this.menus.length - 1) { Divider().color(C.stroke).strokeWidth(0.5) }
}, (m: MenuItem) => m.title)
}.width('92%').margin({ top: 16 }).backgroundColor(C.card).borderRadius(D.rMd).border({ width: 1, color: C.stroke })
}
MenuList 结构:
- 外层 Column:92% 宽 + margin top 16 + 白底 + 14 圆角 + 1px 边框
- 内层 ForEach:5 个 Row(emoji + 标题 + 箭头)+ 条件 Divider
5 个菜单项(每项 3 要素):
| emoji | 标题 | 箭头 |
|---|---|---|
| 📚 | 我的课本 | > |
| 🔄 | 交易记录 | > |
| ⭐ | 我的收藏 | > |
| 💰 | 我的钱包 | > |
| ⚙️ | 设置 | > |
Text(m.emoji).fontSize(18) 18 号 emoji——"📚🔄⭐💰⚙️"——"5 个功能图标"——"课本/交易/收藏/钱包/设置"。
Text(m.title).fontSize(14).fontColor(C.text).layoutWeight(1) 14 号黑标题——"占据中间"——"菜单标题"。
Text('>') 箭头——"14 号灰"——"跳转箭头"——"通用符号"。
onClick(() => promptAction.showToast({ message: m.title })) 点击反馈——"整行可点"——"Toast 反馈"——"占位跳转"。
if (idx < this.menus.length - 1) { Divider() } 条件 Divider——"最后一项不画"——"0.5px 极细"——"5 项 4 分割"。
5 菜单的业务:
- 📚 我的课本(在售管理)
- 🔄 交易记录(买卖历史)
- ⭐ 我的收藏(收藏夹)
- 💰 我的钱包(交易资金)
- ⚙️ 设置(通用)
"💰 我的钱包" 的特色——"钱包系统"——"交易资金"——"余额/提现"——"C2C 交易资金"——"36 独有的菜单"——"交易资产管理"——"资金安全"。
`MenuItem 接口(3 字段):
interface MenuItem { id: number; emoji: string; title: string; }
3 字段:id/emoji/title——"极简菜单模型"——"同 App 32/34/35"——"3 字段足够"。

五、About:底部版本信息
About 是 **"校园课本共享" + "Version 1.0.0"**的版本信息:
@Builder
About() {
Column({ space: 4 }) {
Text('校园课本共享').fontSize(12).fontColor(C.textDim)
Text('Version 1.0.0').fontSize(11).fontColor(C.textDim).opacity(0.7)
}.width('100%').margin({ top: 24 })
}
About 结构:Column 垂直 + 4 间距 + 12 号 App 名 + 11 号版本号(0.7 透明)——"极简底部信息"。
"校园课本共享" 全称——"与首页'课本共享'简称对比"——"About 用全称"——"简称与全称"——"命名的场景"。
Text('Version 1.0.0').fontSize(11).opacity(0.7) 11 号灰 0.7 透明版本——"版本信息"——"系列 About 统一"。
margin({ top: 24 }) 24 顶部间距——"底部呼吸"——"与菜单间距"。
与 App 32-35 About 对比——"五个 App 的 About 同结构"——"系列 About 统一"——"版本信息规范"。

六、我的页的交互细节与可用性分析
6.1 渐变用户卡 vs 实色卡
UserCard 渐变 + StatRow/MenuList 实色——"渐变 = 焦点"——"实色 = 普通"——"层次用色彩"——"3 级视觉层级"。
6.2 悬浮统计的实现
margin -24 上移——"重叠立体"——"与用户卡重叠"——"悬浮层次"——"同 App 32-35"——"系列悬浮统一"。
6.3 4 统计的"交易视角"
6 在售 + 14 已售 + 8 已购 + 12 收藏——"4 维度"——"买卖双视角"——"交易数据"——"C2C 交易画像"——"交易活跃度"。
6.4 钱包的"交易资金"
💰 我的钱包——"交易资金"——"余额管理"——"买卖的钱"——"C2C 资金"——"36 的特色"——"资产管理"。
6.5 信用极好的"信任"
"信用极好"——"交易信用"——"买家信任"——"C2C 交易核心"——"信用 = 成交"——"交易安全"——"信任的价值"。
6.6 我的页的"色彩心理学"
琥珀橙(#F2994A)——"橙色 = 交易/活力"——"我的页的橙"——"课本交易的橙"——"可信赖"。
6.7 我的页的"信息层级"
L1 身份(UserCard)→ L2 数据(StatRow)→ L3 功能(MenuList)→ L4 关于(About)——"4 层信息"——"从身份到元信息"——"用户的金字塔"。
6.8 我的页的"与 App 35 对比"
35 四统计五菜单 / 36 四统计五菜单——"两个学习共享我的"——"35 内容、36 交易"——"业务差异化"——"我的页的演进"。
6.9 我的页的"设计哲学"
我的页的 3 个设计哲学:
- 身份优先——UserCard 顶部渐变最大
- 数据并列——4 统计等宽
- 交易完整——钱包 + 交易记录
"身份 + 数据 + 交易的我的"——"C2C 我的页的设计原则"——"从哲学看设计"。
6.11 我的页的"对比与统一"
统一:92% 宽 + 14 圆角 + 1px 边框(StatRow/MenuList)——"卡片统一"。 对比:UserCard 渐变 / StatRow 悬浮 / MenuList 平铺 / About 文字——"4 块差异"。
6.12 我的页的"终评"
用户卡 + 4 统计 + 5 菜单 + About = 完整我的页——"我的页的完成度"——"可上线级"——"系列 C2C 我的标杆"。
6.13 我的页的"emoji 体系"
📖📚🔄⭐💰⚙️——"6 个 emoji"——"书/课本/交易/收藏/钱包/设置"——"emoji = 功能"——"低成本图标"。
6.14 我的页的"数据一致性"
14 成交(副标题 + 统计)——"跨区数据"——"6 在售(统计 + 首页 6 书)"——"双处一致"——"demo 数据严谨"。
6.15 我的页的"C2C 生态"
在售(供给)+ 已售(成交)+ 已购(消费)+ 收藏(意向)——"C2C 完整生态"——"买卖双方"——"交易的闭环"——"我的页数据即生态"。
6.17 我的页的"双重视角"
卖家视角(在售/已售)+ 买家视角(已购/收藏)——"双重视角"——"既是卖家也是买家"——"C2C 双向"——"交易画像完整"——"36 的特色"。
6.18 我的页的"钱包资金"
💰 钱包 = 交易资金——"买卖的钱"——"余额管理"——"C2C 资金流"——"资金安全"——"交易的信任"——"36 的核心菜单"。
6.19 我的页的"信用体系"
信用极好——"信用评级"——"交易安全"——"买家放心"——"C2C 信任"——"信用 = 竞争力"——"交易的核心"。
6.20 我的页的"emoji 语义"
📖📚🔄⭐💰⚙️——"6 个功能 emoji"——"书/课本/交易/收藏/钱包/设置"——"emoji = 功能识别"——"低成本图标"。
6.21 我的页的"拇指操作"
5 菜单在屏幕中下部——"拇指可达区"——"高频菜单居中"——"设置在最下"——"低频操作放底部"——"拇指设计"。
6.22 我的页的"数据来源"
6/14/8/12——"数据从哪来?"——"在售列表统计"——"成交记录"——"demo 静态数据"——"真实化路径"——"接口替换即活"。
6.23 我的页的"颜色一致性"
琥珀橙贯穿——"渐变卡 + 主题色"——"品牌记忆"——"橙色的辨识"——"课本交易 = 琥珀橙"——"色彩品牌"。
6.24 我的页的"demo 价值"
身份 + 数据 + 功能 + 版本 = 完整我的页——"功能完整"——"用户可管理"——"demo 完成度"——"C2C 我的页标准"——"模板沉淀"。
6.25 我的页的"对比表格"
| 维度 | App 34 | App 35 | App 36 |
|---|---|---|---|
| 统计数 | 4 | 4 | 4 |
| 菜单数 | 5 | 5 | 5 |
| 特色 | 被下载 | 成就 | 钱包 |
| 副标题 | 获赞 | 获赞 | 成交信用 |
"三个学习共享我的对比"——"统计 4/4/4、菜单 5/5/5"——"特色 被下载/成就/钱包"——"副标题 获赞/获赞/成交"——"业务的差异化"——"系列我的演进"。
6.26 我的页的"课本管理"
📚 我的课本菜单——"在售管理"——"上架/下架"——"商品列表"——"卖家后台"——"管理的价值"。
6.27 我的页的"首屏信息"
首屏:用户卡 + 4 统计 + 前 3 菜单——"首屏核心"——"身份 + 数据 + 高频功能"——"滚动看钱包设置"——"首屏信息设计"。
6.28 我的页的"最终设计评价"
用户卡 + 4 统计 + 5 菜单 + About = 完整我的页——"从结构到数据到交易的完整"——"可上线级"——"系列 C2C 我的标杆"——"我的页完成度评级"。
七、总结:琥珀橙 + 渐变 + 悬浮 + 交易管理
App 36 我的页一句话:用琥珀橙(#F2994A)渐变用户卡 + 4 统计悬浮 + 5 菜单 + 底部 About 的完整我的页——琥珀橙渐变 UserCard 配 📖 半透明圆形头像 + "二手书达人" + "成交 14 笔 · 信用极好"副标题,悬浮 StatRow 用 -24 margin 上移展示 6/14/8/12 四维交易数据,5 菜单用 emoji + 标题 + ">" 箭头和 0.5px Divider 分隔,底部 About 显示全称和版本。
3 个设计亮点:
- 买卖双视角统计——6 在售 + 14 已售 + 8 已购
- 信用体系——"信用极好"交易信任
- 钱包菜单——💰 交易资金管理
主题色设计逻辑:琥珀橙 = 交易/活力的橙——"我的页用琥珀橙,与全 App 品牌色一致"——"品牌贯穿"。
与系列呼应:渐变 UserCard(32-35)、悬浮统计(32-35)、92% 宽卡片(系列)、emoji 菜单(系列)、0.5px Divider(系列)、About 版本(系列)——"36 我的把系列的渐变 + 悬浮 + 菜单手法组合出'二手交易'场景"。
体验细节:交易数据、信用体系、钱包管理、4 统计悬浮——"我的页的核心 = 让用户'3 秒看完交易数据 + 1 秒进管理'"。
可扩展性展望:真实交易数据、钱包充值提现、课本管理、交易评价、收藏同步、设置详情——"demo 的课本我的页骨架完整"。
七、扩展思考:我的页的信息架构与设计哲学
7.1 我的页的"用户视角"
4 块 = 4 个"我":
- 我是谁(UserCard)——身份 + 信用
- 我的数据(StatRow)——在售/已售/已购/收藏
- 我能做什么(MenuList)——5 功能入口
- 关于 App(About)——元信息
"4 个我的层次"——"从身份到元信息"——"用户视角的金字塔"——"自上而下的认知"。
7.2 我的页的"转化路径"
看用户卡(二手书达人)→ 看统计(6/14/8/12)→ 点菜单(课本/交易/钱包)——"从身份到行动"——"我的页的转化链"——"菜单 = 行动入口"——"钱包 = 资金管理"。
7.3 我的页的"业务建模"
MenuItem 3 字段(id/emoji/title)——"3 字段建模"——"极简菜单"——"最小可用集"——加 badge(角标)、加 extra(数据预览)即可扩展——"数据模型的扩展点"——"33 的 extra 是扩展示例"。
7.4 我的页的"设计哲学"
我的页的 3 个设计哲学:
- 身份优先——渐变 UserCard 视觉焦点
- 数据透明——4 统计等宽
- 交易完整——钱包 + 交易记录
"身份 + 数据 + 交易的我的页"——"C2C 我的页的设计原则"——"从哲学看设计"——"这套方法论可直接迁移到任何 C2C 交易类 App"。
7.5 我的页的"终评"
App 36 我的页综合评估——"四区结构 + 琥珀橙主题 + 完整交易数据"——"我的页的完成度评级"——"一个可上线级的 C2C 我的页"——"系列 C2C 我的标杆"——"demo 的高完成度"。
八、彩蛋:我的页的细节设计
8.1 "二手书达人" 的命名
"二手书达人"——"达人 = 专家"——"二手书交易者"——"身份命名"——"达人的荣誉"——"C2C 卖家身份"。
8.2 "信用极好" 的信任
"信用极好"——"交易信用"——"买家信任"——"信用评级"——"C2C 交易核心"——"信用 = 安全感"——"交易的信任"。
8.3 "成交 14 笔" 的数据
"成交 14 笔"——"交易次数"——"历史成交"——"交易活跃"——"与统计'已售 14'呼应"——"双处一致"——"数据严谨"。
8.4 "💰 钱包" 的交易资金
"我的钱包"——"交易资金"——"余额/提现"——"买卖的钱"——"C2C 资金流"——"资产管理"——"36 的特色菜单"。
8.5 4 统计的"纯数字"
6/14/8/12——"无单位"——"计数"——"纯数字简洁"——"统计直观"——"vs 33 的 ¥88"。
8.6 悬浮的"-24 margin"
margin top -24——"上移 24"——"重叠 24"——"悬浮高度"——"立体层次"——"同系列"。
8.7 我的页的"颜色体系"
渐变橙 + 半透明白 + 黑字 + 灰字——"4 级颜色"——"渐变(焦点)→ 白(头像)→ 黑(标题)→ 灰(次要)"——"颜色的层级"。
8.8 我的页的"demo 完整性"
用户卡 + 统计 + 5 菜单 + About = 完整我的页——"功能完整"——"用户可管理"——"demo 的完成度"——"从身份到管理的完整链"。
8.9 我的页的"交易闭环"
在售(供给)+ 交易记录(成交)+ 钱包(资金)——"交易完整闭环"——"买卖 + 资金"——"C2C 交易全流程"——"交易的管理"。
补充说明:本篇所有代码引用均基于 36-book-share/entry/src/main/ets/pages/ProfileTab.ets 实际源码,行号与源码一一对应;4 张实机截图分别覆盖我的首屏、交易记录菜单点击、我的收藏菜单点击、我的钱包菜单点击四种差异场景,全部含模拟器轮廓,图床域名统一为 imgbed.devzoo.top。

更多推荐




所有评论(0)