Flutter 框架跨平台鸿蒙开发 - 职业体验
运行效果图职业体验是一款创新的职业探索应用,让用户能够模拟体验不同职业的一天。通过精心设计的职业场景和事件系统,用户可以深入了解各种职业的工作内容、挑战和成就感,帮助用户做出更明智的职业选择。应用以沉浸式体验为核心,将每个职业的一天分解为多个时间段的事件,包括日常工作、挑战任务、关键决策和成就时刻。用户在体验过程中需要做出选择,这些选择会影响满意度和精力值,最终获得完整的职业体验报告。应用采用清新
职业体验应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图






1.1 应用简介
职业体验是一款创新的职业探索应用,让用户能够模拟体验不同职业的一天。通过精心设计的职业场景和事件系统,用户可以深入了解各种职业的工作内容、挑战和成就感,帮助用户做出更明智的职业选择。
应用以沉浸式体验为核心,将每个职业的一天分解为多个时间段的事件,包括日常工作、挑战任务、关键决策和成就时刻。用户在体验过程中需要做出选择,这些选择会影响满意度和精力值,最终获得完整的职业体验报告。
应用采用清新的蓝色主题,界面设计简洁直观。内置六大职业分类,涵盖医疗、教育、科技、服务、创意和公共领域,每个职业都有详细的介绍、技能要求和薪资信息。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 职业展示 | 展示各种职业信息 | 卡片网格布局 |
| 职业详情 | 查看职业详细信息 | 底部弹窗 |
| 体验系统 | 模拟职业一天体验 | 事件触发+对话框 |
| 决策系统 | 职业相关选择决策 | 多选项对话框 |
| 状态追踪 | 满意度和精力值追踪 | 进度条显示 |
| 体验记录 | 记录体验历史 | 时间线列表 |
| 统计分析 | 职业体验数据分析 | 图表展示 |
1.3 职业分类
应用包含六大职业分类,覆盖主流职业领域:
| 序号 | 分类名称 | 图标 | 颜色 | 典型职业 |
|---|---|---|---|---|
| 1 | 医疗 | local_hospital | #E91E63 | 医生、护士、药剂师 |
| 2 | 教育 | school | #4CAF50 | 教师、培训师、教授 |
| 3 | 科技 | computer | #2196F3 | 程序员、产品经理、设计师 |
| 4 | 服务 | restaurant | #FF9800 | 厨师、服务员、理发师 |
| 5 | 创意 | palette | #9C27B0 | 设计师、作家、艺术家 |
| 6 | 公共 | local_fire_department | #F44336 | 消防员、警察、公务员 |
1.4 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | setState | - |
| 动画系统 | AnimationController | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.5 项目结构
lib/
└── main_career_experience.dart
├── CareerExperienceApp # 应用入口
├── CareerCategory # 职业分类枚举
├── Career # 职业模型
├── CareerEvent # 职业事件模型
├── EventType # 事件类型枚举
├── CareerChoice # 职业选择模型
├── ExperienceRecord # 体验记录模型
├── CareerExperienceHomePage # 主页面(底部导航)
├── _buildCareerPage # 职业页面
├── _buildHistoryPage # 历史页面
└── _buildStatsPage # 统计页面
二、设计理念
2.1 职业探索理念
2.2 体验系统设计
职业体验系统将一天的工作分解为多个事件:
2.3 决策影响模型
用户的选择会影响体验结果:
2.4 职业信息架构
每个职业包含完整的信息体系:
三、系统架构
3.1 整体架构图
3.2 类图设计
3.3 体验流程时序图
四、核心功能实现
4.1 职业数据模型
职业模型包含完整的职业信息:
class Career {
final String id; // 唯一标识
final String title; // 职业名称
final String emoji; // 职业图标
final String description; // 职业描述
final CareerCategory category;// 所属分类
final Color color; // 主题颜色
final List<String> skills; // 所需技能
final String salary; // 薪资范围
final String difficulty; // 难度等级
final List<CareerEvent> dailyEvents; // 一天的事件列表
}
职业数据示例:
Career(
id: 'doctor',
title: '医生',
emoji: '👨⚕️',
description: '救死扶伤,守护生命健康的白衣天使',
category: CareerCategory.medical,
color: const Color(0xFFE91E63),
skills: ['诊断能力', '沟通技巧', '抗压能力', '专业知识'],
salary: '15k-50k',
difficulty: '困难',
dailyEvents: [
CareerEvent(
time: '07:00',
title: '晨间查房',
description: '清晨来到医院,开始查房了解病人情况...',
emoji: '🏥',
type: EventType.routine,
),
// 更多事件...
],
)
4.2 事件触发系统
事件系统是体验的核心:
void _showEventDialog(CareerEvent event) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
title: Row(
children: [
Text(event.emoji, style: const TextStyle(fontSize: 32)),
const SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(event.time, style: TextStyle(fontSize: 12)),
Text(event.title, style: const TextStyle(fontSize: 20)),
],
),
),
],
),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
// 事件描述
Container(
padding: const EdgeInsets.all(16),
child: Text(event.description),
),
// 状态栏
_buildStatusBars(),
// 决策选项(如果有)
if (event.choices != null)
...event.choices!.map((choice) {
return ElevatedButton(
onPressed: () => _makeChoice(choice),
child: Text(choice.text),
);
}),
],
),
),
);
}
4.3 决策影响系统
用户的选择会影响体验结果:
class CareerChoice {
final String text; // 选项文本
final String result; // 选择结果
final int satisfaction; // 满意度变化
final int energy; // 精力值变化
}
void _makeChoice(CareerChoice choice) {
Navigator.pop(context);
// 更新状态
setState(() {
_satisfaction = (_satisfaction + choice.satisfaction).clamp(0, 100);
_energy = (_energy + choice.energy).clamp(0, 100);
});
// 显示选择结果
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text('选择结果'),
content: Column(
children: [
Text(choice.result),
// 显示状态变化
Row(
children: [
_buildChangeIndicator('满意度', choice.satisfaction),
_buildChangeIndicator('精力值', choice.energy),
],
),
],
),
),
);
}
4.4 体验记录系统
记录每次体验的详细信息:
class ExperienceRecord {
final String id; // 唯一标识
final Career career; // 体验的职业
final DateTime startTime; // 开始时间
final DateTime endTime; // 结束时间
final int satisfaction; // 最终满意度
final int energy; // 最终精力值
final List<String> achievements; // 获得的成就
final Map<String, int> skills; // 技能提升
}
void _endExperience() {
final record = ExperienceRecord(
id: DateTime.now().millisecondsSinceEpoch.toString(),
career: _selectedCareer!,
startTime: _experienceStartTime!,
endTime: DateTime.now(),
satisfaction: _satisfaction,
energy: _energy,
achievements: List.from(_achievements),
skills: Map.from(_skillProgress),
);
setState(() {
_records.insert(0, record);
_isExperiencing = false;
});
_showExperienceSummary(record);
}
4.5 状态追踪系统
实时追踪用户的满意度和精力值:
Widget _buildStatusBars() {
return Column(
children: [
// 满意度进度条
Row(
children: [
const Icon(Icons.sentiment_satisfied, size: 20),
const SizedBox(width: 8),
Expanded(
child: Column(
children: [
Text('满意度: $_satisfaction%'),
LinearProgressIndicator(
value: _satisfaction / 100,
valueColor: AlwaysStoppedAnimation<Color>(
_selectedCareer!.color,
),
),
],
),
),
],
),
const SizedBox(height: 12),
// 精力值进度条
Row(
children: [
const Icon(Icons.battery_charging_full, size: 20),
const SizedBox(width: 8),
Expanded(
child: Column(
children: [
Text('精力值: $_energy%'),
LinearProgressIndicator(
value: _energy / 100,
valueColor: AlwaysStoppedAnimation<Color>(Colors.green),
),
],
),
),
],
),
],
);
}
五、UI设计规范
5.1 配色方案
应用采用蓝色为主色调,象征专业与信任:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #2196F3 (Blue) | 导航、按钮、强调元素 |
| 辅助色 | #03A9F4 (Light Blue) | 渐变、次要元素 |
| 分类-医疗 | #E91E63 (Pink) | 医疗职业 |
| 分类-教育 | #4CAF50 (Green) | 教育职业 |
| 分类-科技 | #2196F3 (Blue) | 科技职业 |
| 分类-服务 | #FF9800 (Orange) | 服务职业 |
| 分类-创意 | #9C27B0 (Purple) | 创意职业 |
| 分类-公共 | #F44336 (Red) | 公共职业 |
5.2 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 应用标题 | 24px | Bold | #FFFFFF |
| 职业名称 | 18px | Bold | #000000 |
| 事件标题 | 20px | Bold | #000000 |
| 状态数值 | 20px | Bold | 动态颜色 |
| 描述文字 | 14-15px | Regular | #757575 |
| 辅助文字 | 11-12px | Regular | #9E9E9E |
5.3 组件规范
5.3.1 职业卡片
┌─────────────────────────────────┐
│ 👨⚕️ 医生 │
│ 医疗 │
├─────────────────────────────────┤
│ 救死扶伤,守护生命健康... │
│ │
│ 💰 15k-50k │
│ ⭐ 困难 │
└─────────────────────────────────┘
5.3.2 事件时间线
🏥 ───┐
│ 07:00 晨间查房
│ 清晨来到医院,开始查房...
│
👥 ───┤
│ 09:00 门诊接诊
│ 门诊大厅已经排起了长队...
5.3.3 状态进度条
满意度: 75%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
███████████████████████████████░░░
精力值: 60%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
████████████████████████░░░░░░░░░░
六、交互设计
6.1 职业体验流程
6.2 决策影响流程
6.3 页面切换状态
七、职业设计指南
7.1 职业选择原则
选择职业时应考虑以下因素:
| 因素 | 描述 | 示例 |
|---|---|---|
| 代表性 | 选择具有代表性的职业 | 医生、教师、程序员 |
| 多样性 | 覆盖不同行业和领域 | 医疗、教育、科技、服务 |
| 趣味性 | 包含有趣的工作场景 | 消防员的紧急救援 |
| 教育性 | 能够传递职业知识 | 了解不同职业的日常工作 |
| 平衡性 | 正面和负面事件平衡 | 成就与挑战并存 |
7.2 事件设计原则
设计职业事件时应遵循:
7.3 决策设计原则
设计决策选项时应考虑:
- 真实性:选项应符合实际工作场景
- 平衡性:每个选项都有利弊
- 教育性:让用户了解职业的挑战
- 多样性:不同类型的决策场景
7.4 职业信息完整性
每个职业应包含完整信息:
| 信息类型 | 内容 | 用途 |
|---|---|---|
| 基本信息 | 名称、描述、分类 | 快速了解职业 |
| 薪资信息 | 薪资范围 | 了解收入水平 |
| 难度等级 | 入门难度 | 评估职业门槛 |
| 技能要求 | 核心技能列表 | 了解所需能力 |
| 工作安排 | 一天的事件列表 | 体验工作内容 |
八、扩展功能规划
8.1 后续版本规划
8.2 功能扩展建议
8.2.1 更多职业
扩展职业库,增加更多职业类型:
- 金融行业:银行家、投资顾问、会计师
- 艺术领域:画家、音乐家、演员
- 体育行业:运动员、教练、裁判
- 科技前沿:AI工程师、数据科学家、产品经理
8.2.2 职业匹配测试
通过问卷测试推荐适合的职业:
- 性格测试
- 兴趣测试
- 能力评估
- 职业推荐
8.2.3 社区分享
建立职业体验社区:
- 分享体验心得
- 真实职业故事
- 职业问答
- 行业交流
九、注意事项
9.1 开发注意事项
-
事件设计:确保事件真实可信,符合职业特点
-
状态管理:使用setState管理本地状态
-
用户体验:保持体验流程流畅,避免卡顿
-
数据验证:确保满意度、精力值在合理范围内
9.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 事件不显示 | 事件列表为空 | 检查dailyEvents |
| 状态不更新 | setState未调用 | 检查状态更新逻辑 |
| 决策无效果 | 选择未处理 | 检查_makeChoice方法 |
| 记录未保存 | 记录列表未更新 | 检查_records操作 |
9.3 使用提示
💼 职业体验使用小贴士 💼
每种职业都有其独特的价值和挑战。
体验不同职业可以帮助你找到真正的兴趣。
职业选择不仅关乎薪资,更关乎成就感。
保持开放心态,认真体验每个职业的一天。
提示:这只是模拟体验,真实职业需要更多了解。
十、运行说明
10.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
10.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_career_experience.dart --web-port 8123
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_career_experience.dart
# 运行到Windows
flutter run -d windows -t lib/main_career_experience.dart
# 代码分析
flutter analyze lib/main_career_experience.dart
十一、总结
职业体验是一款创新的职业探索应用,通过模拟体验不同职业的一天,帮助用户深入了解各种职业的工作内容、挑战和成就感。应用以沉浸式体验为核心,将每个职业的一天分解为多个时间段的事件,包括日常工作、挑战任务、关键决策和成就时刻。
从技术实现来看,应用使用事件触发系统模拟职业体验,通过决策系统让用户做出选择,影响满意度和精力值;采用状态追踪系统实时显示用户体验状态;使用记录系统保存每次体验的详细信息。从用户体验来看,应用提供丰富的职业信息,包括薪资、难度、技能要求等;设计真实的工作场景和决策选项;生成详细的体验报告和统计数据。
应用不仅是一个职业体验工具,更是一个职业探索平台。它提醒我们:每种职业都有其独特的价值和挑战;体验不同职业可以帮助你找到真正的兴趣;职业选择不仅关乎薪资,更关乎成就感。在职业选择的关键时刻,职业体验为我们提供了一种全新的探索方式——通过模拟体验,做出更明智的选择。
体验职业人生,探索未来可能
更多推荐
所有评论(0)