欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

image-20260408221117081

image-20260408221125295

image-20260408221130068

image-20260408221136370

image-20260408221143012

1.1 应用简介

人生总结是一款人生分析类应用,通过收集用户的基本信息、人生维度评分和时间分配数据,自动生成个性化的人生报告。帮助用户全面了解自己的人生状态,发现优势和不足,获得人生建议。

应用核心理念:回顾过去,把握现在,规划未来。

人生是一场漫长的旅程,我们常常忙于赶路而忘记了审视自己的方向。人生总结应用为用户提供了一个停下来思考的机会,通过数据化的方式呈现人生全貌,让每个人都能更清晰地认识自己。

1.2 核心功能

功能模块 功能描述 实现方式
信息输入 收集用户基本信息 表单输入
维度评分 评估人生各维度状态 滑块评分
时间分配 记录每日时间使用 滑块调节
报告生成 自动生成人生报告 数据分析
时间线展示 展示人生重要事件 时间轴UI
目标管理 展示人生目标列表 列表展示

1.3 人生阶段

序号 阶段 Emoji 年龄范围 特点描述
1 童年 👶 0-12岁 无忧无虑的成长时光
2 少年 🧒 13-18岁 探索自我的青春岁月
3 青年 🧑 19-35岁 奋斗拼搏的黄金时期
4 中年 👨 36-55岁 成熟稳重的责任担当
5 老年 👴 56-100岁 智慧沉淀的人生收获

1.4 人生维度

序号 维度 Emoji 描述
1 事业 💼 职业发展与成就
2 家庭 👨‍👩‍👧‍👦 家庭关系与幸福
3 健康 💪 身体健康与运动
4 财富 💰 经济状况与理财
5 成长 📚 学习进步与提升
6 社交 🤝 人际关系与社交
7 爱好 🎨 兴趣爱好与娱乐
8 心灵 🧘 精神世界与信仰

1.5 时间分类

分类 Emoji 颜色 描述
工作 💼 蓝色 职业工作相关
睡眠 😴 紫色 休息睡眠时间
家庭 👨‍👩‍👧‍👦 绿色 家庭陪伴时间
社交 🤝 橙色 社交活动时间
爱好 🎨 红色 兴趣爱好时间
学习 📚 青色 学习提升时间
运动 🏃 粉色 运动锻炼时间
其他 灰色 其他活动时间

1.6 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
状态管理 setState -
导航控制 TabController -
图表绘制 CustomPainter -
目标平台 鸿蒙OS / Web API 21+

二、项目结构

lib/
├── main_life_summary.dart    # 应用主入口(~1100行)
│   ├── LifeSummaryApp        # 根应用组件
│   ├── LifeStage             # 人生阶段枚举
│   ├── LifeDimension         # 人生维度枚举
│   ├── TimeCategory          # 时间分类枚举
│   ├── LifeData              # 人生数据模型
│   ├── LifeEvent             # 人生事件模型
│   ├── LifeGoal              # 人生目标模型
│   ├── LifeReport            # 人生报告模型
│   └── LifeSummaryHomePage   # 主页面

三、数据模型

3.1 人生阶段枚举 (LifeStage)

enum LifeStage {
  childhood('童年', '👶', 0, 12, '无忧无虑的成长时光'),
  teenage('少年', '🧒', 13, 18, '探索自我的青春岁月'),
  youth('青年', '🧑', 19, 35, '奋斗拼搏的黄金时期'),
  middle('中年', '👨', 36, 55, '成熟稳重的责任担当'),
  senior('老年', '👴', 56, 100, '智慧沉淀的人生收获');

  final String label;       // 阶段名称
  final String icon;        // 代表图标
  final int startAge;       // 起始年龄
  final int endAge;         // 结束年龄
  final String description; // 阶段描述
}

3.2 人生维度枚举 (LifeDimension)

enum LifeDimension {
  career('事业', '💼', '职业发展与成就'),
  family('家庭', '👨‍👩‍👧‍👦', '家庭关系与幸福'),
  health('健康', '💪', '身体健康与运动'),
  wealth('财富', '💰', '经济状况与理财'),
  growth('成长', '📚', '学习进步与提升'),
  social('社交', '🤝', '人际关系与社交'),
  hobby('爱好', '🎨', '兴趣爱好与娱乐'),
  spirit('心灵', '🧘', '精神世界与信仰');

  final String label;       // 维度名称
  final String icon;        // 代表图标
  final String description; // 维度描述
}

3.3 人生数据模型 (LifeData)

class LifeData {
  final String name;                        // 姓名
  final int age;                            // 年龄
  final String gender;                      // 性别
  final String occupation;                  // 职业
  final String education;                   // 学历
  final String relationship;                // 感情状态
  final Map<LifeDimension, int> dimensionScores;  // 维度评分
  final Map<TimeCategory, double> timeDistribution; // 时间分配
  final List<LifeEvent> events;             // 人生事件
  final List<LifeGoal> goals;               // 人生目标
  final String motto;                       // 人生格言
}

3.4 人生报告模型 (LifeReport)

class LifeReport {
  final LifeStage currentStage;             // 当前阶段
  final double lifeProgress;                // 人生进度
  final int daysLived;                      // 已度过天数
  final int daysRemaining;                  // 剩余天数
  final String lifeQuote;                   // 人生语录
  final Map<LifeDimension, String> analysis; // 维度分析
  final List<String> suggestions;           // 人生建议
  final double happinessIndex;              // 幸福指数
  final double balanceScore;                // 平衡指数
}

3.5 数据流转图

输入基本信息

维度评分

时间分配

生成报告

计算指标

生成分析

展示报告

时间线展示

目标展示


四、核心功能实现

4.1 报告生成

void _generateReport() {
  int age = int.tryParse(_ageController.text) ?? 28;

  // 确定人生阶段
  LifeStage stage = LifeStage.values.firstWhere(
    (s) => age >= s.startAge && age <= s.endAge,
    orElse: () => LifeStage.youth,
  );

  // 计算人生进度
  int daysLived = age * 365;
  int expectedLifespan = 80;
  int daysRemaining = (expectedLifespan - age) * 365;
  double lifeProgress = age / expectedLifespan;

  // 计算幸福指数和平衡指数
  double happinessIndex = _dimensionScores.values.reduce((a, b) => a + b) / _dimensionScores.length;
  double balanceScore = _calculateBalanceScore();

  // 生成分析和建议
  Map<LifeDimension, String> analysis = _generateAnalysis();
  List<String> suggestions = _generateSuggestions();
  String lifeQuote = _getLifeQuote(stage);

  setState(() {
    _lifeReport = LifeReport(
      currentStage: stage,
      lifeProgress: lifeProgress,
      daysLived: daysLived,
      daysRemaining: daysRemaining,
      lifeQuote: lifeQuote,
      analysis: analysis,
      suggestions: suggestions,
      happinessIndex: happinessIndex,
      balanceScore: balanceScore,
    );
  });
}

4.2 平衡指数计算

double _calculateBalanceScore() {
  double total = _timeDistribution.values.reduce((a, b) => a + b);
  Map<TimeCategory, double> percentages = {};
  _timeDistribution.forEach((key, value) {
    percentages[key] = value / total;
  });

  // 理想时间分配比例
  double idealWork = 0.33;     // 工作 33%
  double idealSleep = 0.29;    // 睡眠 29%
  double idealFamily = 0.08;   // 家庭 8%
  double idealExercise = 0.04; // 运动 4%

  double score = 100;
  score -= (percentages[TimeCategory.work]! - idealWork).abs() * 50;
  score -= (percentages[TimeCategory.sleep]! - idealSleep).abs() * 30;
  score -= (percentages[TimeCategory.family]! - idealFamily).abs() * 20;
  score -= (percentages[TimeCategory.exercise]! - idealExercise).abs() * 20;

  return score.clamp(0, 100);
}

4.3 维度分析生成

Map<LifeDimension, String> _generateAnalysis() {
  Map<LifeDimension, String> analysis = {};

  _dimensionScores.forEach((dimension, score) {
    if (score >= 80) {
      analysis[dimension] = '表现优秀,继续保持!这是你人生的一大亮点。';
    } else if (score >= 60) {
      analysis[dimension] = '状态良好,还有提升空间,可以适当投入更多精力。';
    } else if (score >= 40) {
      analysis[dimension] = '需要关注,建议制定改善计划,逐步提升。';
    } else {
      analysis[dimension] = '需要重视,建议寻求专业帮助或制定详细改善方案。';
    }
  });

  return analysis;
}

4.4 人生建议生成

List<String> _generateSuggestions() {
  List<String> suggestions = [];

  // 找出得分最低的三个维度
  var sortedDimensions = _dimensionScores.entries.toList()
    ..sort((a, b) => a.value.compareTo(b.value));

  for (var entry in sortedDimensions.take(3)) {
    switch (entry.key) {
      case LifeDimension.career:
        suggestions.add('💼 事业建议:设定清晰的职业目标,持续学习新技能');
        break;
      case LifeDimension.health:
        suggestions.add('💪 健康建议:坚持规律运动,注意饮食和作息');
        break;
      // ... 其他维度
    }
  }

  return suggestions;
}

五、图表可视化

5.1 雷达图 (RadarChartPainter)

用于展示人生维度评分:

class RadarChartPainter extends CustomPainter {
  final Map<LifeDimension, int> scores;

  
  void paint(Canvas canvas, Size size) {
    final center = Offset(size.width / 2, size.height / 2);
    final radius = min(size.width, size.height) / 2 - 20;
    final dimensions = LifeDimension.values;

    // 绘制背景网格
    for (int i = 1; i <= 5; i++) {
      final r = radius * i / 5;
      final path = Path();
      for (int j = 0; j <= dimensions.length; j++) {
        final angle = (j * 2 * pi / dimensions.length) - pi / 2;
        final x = center.dx + r * cos(angle);
        final y = center.dy + r * sin(angle);
        if (j == 0) path.moveTo(x, y);
        else path.lineTo(x, y);
      }
      canvas.drawPath(path, bgPaint);
    }

    // 绘制数据区域
    final dataPath = Path();
    for (int i = 0; i <= dimensions.length; i++) {
      final index = i % dimensions.length;
      final score = scores[dimensions[index]] ?? 0;
      final r = radius * score / 100;
      final angle = (index * 2 * pi / dimensions.length) - pi / 2;
      final x = center.dx + r * cos(angle);
      final y = center.dy + r * sin(angle);
      if (i == 0) dataPath.moveTo(x, y);
      else dataPath.lineTo(x, y);
    }
    canvas.drawPath(dataPath, dataPaint);
  }
}

5.2 饼图 (PieChartPainter)

用于展示时间分配:

class PieChartPainter extends CustomPainter {
  final Map<TimeCategory, double> distribution;

  
  void paint(Canvas canvas, Size size) {
    final center = Offset(size.width / 2, size.height / 2);
    final radius = min(size.width, size.height) / 2 - 10;

    double total = distribution.values.fold(0, (a, b) => a + b);
    double startAngle = -pi / 2;

    distribution.forEach((category, hours) {
      if (hours > 0) {
        final sweepAngle = (hours / total) * 2 * pi;
        final paint = Paint()
          ..color = category.color
          ..style = PaintingStyle.fill;

        canvas.drawArc(
          Rect.fromCircle(center: center, radius: radius),
          startAngle,
          sweepAngle,
          true,
          paint,
        );
        startAngle += sweepAngle;
      }
    });

    // 绘制中心圆(环形图效果)
    canvas.drawCircle(center, radius * 0.5, innerPaint);
  }
}

5.3 雷达图数学原理

雷达图基于极坐标系统:

x i = r i ⋅ cos ⁡ ( θ i ) x_i = r_i \cdot \cos(\theta_i) xi=ricos(θi)
y i = r i ⋅ sin ⁡ ( θ i ) y_i = r_i \cdot \sin(\theta_i) yi=risin(θi)

其中:

  • r i = s c o r e i 100 × R r_i = \frac{score_i}{100} \times R ri=100scorei×R R R R为最大半径
  • θ i = 2 π i n − π 2 \theta_i = \frac{2\pi i}{n} - \frac{\pi}{2} θi=n2πi2π n n n为维度数量

5.4 饼图数学原理

饼图扇形角度计算:

θ c a t e g o r y = h o u r s c a t e g o r y ∑ h o u r s × 2 π \theta_{category} = \frac{hours_{category}}{\sum hours} \times 2\pi θcategory=hourshourscategory×2π


六、UI设计

6.1 色彩系统

应用以靛蓝色为主色调,象征智慧与深度:

颜色类型 色值 用途
背景渐变1 #283593 深靛蓝
背景渐变2 #3949AB 中靛蓝
背景渐变3 #5C6BC0 浅靛蓝
主色调 #5C6BC0 靛蓝
强调色 #7986CB 浅靛蓝
文字主色 #FFFFFF 白色

6.2 页面结构

┌─────────────────────────────────────┐
│  📖 人生总结                    🧑  │  ← 标题栏
│  自动生成你的人生报告               │
├─────────────────────────────────────┤
│  [输入] [报告] [时间线] [目标]     │  ← Tab栏
├─────────────────────────────────────┤
│  👤 基本信息                        │
│  [姓名____] [年龄____]             │
│  性别: [男▼] 职业: [程序员▼]       │  ← 输入表单
├─────────────────────────────────────┤
│  ⭐ 人生维度评分                    │
│  💼 事业  70分  ═════════░░░       │
│  👨‍👩‍👧‍👦 家庭  65分  ═══════░░░░░       │  ← 维度评分
│  ...                               │
├─────────────────────────────────────┤
│  📅 每日时间分配                    │
│  💼 工作  8.0h  ═════════░░░       │  ← 时间分配
│  😴 睡眠  7.0h  ═══════░░░░░       │
├─────────────────────────────────────┤
│      [ ✨ 生成人生报告 ]            │  ← 生成按钮
└─────────────────────────────────────┘

6.3 报告页面结构

┌─────────────────────────────────────┐
│              🧑                      │
│         小明的人生报告              │
│      [青年 · 28岁 · 程序员]        │
│  "青年是人生的黄金时代..."         │
├─────────────────────────────────────┤
│  已度过: 10220天  │  剩余约: 18980天│
│  ████████████░░░░░░░░░░░░░░░░░░░  │
│  人生进度 35.0%                     │
│  💖幸福指数: 61.3  ⚖️平衡指数: 72.5 │
├─────────────────────────────────────┤
│  📊 维度分析                        │
│  ┌─────────────────────────────┐  │
│  │      雷达图展示              │  │  ← 雷达图
│  └─────────────────────────────┘  │
│  💼 事业 70分 ███████░░░ 表现良好  │
│  👨‍👩‍👧‍👦 家庭 65分 ██████░░░░ 需要关注  │
├─────────────────────────────────────┤
│  💡 人生建议                        │
│  💼 事业建议:设定清晰的职业目标...│  ← 建议列表
└─────────────────────────────────────┘

6.4 交互设计

交互元素 触发方式 响应行为
维度滑块 拖动 调整维度评分
时间滑块 拖动 调整时间分配
生成按钮 点击 生成人生报告
Tab切换 点击 切换页面

七、状态管理

7.1 状态分类

状态类型 状态名称 说明
人生数据 _lifeData 用户人生数据
人生报告 _lifeReport 生成的报告
维度评分 _dimensionScores 各维度评分
时间分配 _timeDistribution 时间分配数据
输入控制器 _nameController 姓名输入
输入控制器 _ageController 年龄输入

7.2 状态流转

初始化

调整评分/时间

点击生成

显示报告

切换Tab

切换Tab

返回修改

输入中

报告生成

查看报告

查看时间线

查看目标

7.3 报告生成流程图

计算模块 应用 用户 计算模块 应用 用户 输入基本信息 调整维度评分 调整时间分配 点击生成报告 计算人生阶段 计算人生进度 计算幸福指数 计算平衡指数 生成维度分析 生成人生建议 返回报告数据 展示人生报告

八、人生指标计算

8.1 幸福指数

幸福指数为各维度评分的平均值:

H a p p i n e s s I n d e x = ∑ i = 1 n S c o r e i n HappinessIndex = \frac{\sum_{i=1}^{n} Score_i}{n} HappinessIndex=ni=1nScorei

其中:

  • S c o r e i Score_i Scorei 为第 i i i个维度的评分
  • n n n 为维度总数(8个)

8.2 平衡指数

平衡指数衡量时间分配的均衡程度:

B a l a n c e S c o r e = 100 − ∑ i = 1 m w i × ∣ p i − p i i d e a l ∣ BalanceScore = 100 - \sum_{i=1}^{m} w_i \times |p_i - p_i^{ideal}| BalanceScore=100i=1mwi×pipiideal

其中:

  • p i p_i pi 为第 i i i类时间的实际占比
  • p i i d e a l p_i^{ideal} piideal 为理想占比
  • w i w_i wi 为权重系数

8.3 人生进度

人生进度基于预期寿命计算:

L i f e P r o g r e s s = A g e L i f e E x p e c t a n c y LifeProgress = \frac{Age}{LifeExpectancy} LifeProgress=LifeExpectancyAge

默认预期寿命为80岁。

8.4 指标解读

指标 范围 解读
幸福指数 0-100 >70优秀,50-70良好,<50需关注
平衡指数 0-100 >80均衡,60-80基本均衡,<60需调整
人生进度 0-1 百分比显示人生已过比例

九、性能优化

9.1 渲染优化

优化点 实现方式 效果
图表绘制 CustomPainter 高效绘制
Tab切换 TabController 平滑切换
状态更新 setState局部 减少重绘
列表渲染 ListView.builder 按需渲染

9.2 内存管理


void dispose() {
  _tabController.dispose();
  _nameController.dispose();
  _ageController.dispose();
  super.dispose();
}

9.3 性能指标

指标 目标值 实测值
图表绘制 60fps 60fps
内存占用 < 50MB 待测试
启动时间 < 2s 待测试
CPU占用 < 15% 待测试

十、常见问题

10.1 问题排查

问题 原因 解决方案
报告不显示 未生成报告 点击生成按钮
图表不显示 数据为空 检查数据输入
进度计算错误 年龄格式错误 检查年龄输入
建议为空 评分全为0 调整维度评分

10.2 调试技巧

// 打印人生数据
debugPrint('Age: ${_lifeData?.age}');
debugPrint('Happiness: ${_lifeReport?.happinessIndex}');
debugPrint('Balance: ${_lifeReport?.balanceScore}');
debugPrint('Dimension scores: ${_lifeData?.dimensionScores}');

十一、运行说明

11.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+

11.2 运行命令

# 查看可用设备
flutter devices

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_life_summary.dart

# 运行到Web服务器
flutter run -d web-server -t lib/main_life_summary.dart --web-port 8133

# 运行到Windows
flutter run -d windows -t lib/main_life_summary.dart

# 代码分析
flutter analyze lib/main_life_summary.dart

十二、扩展建议

12.1 功能扩展

功能 优先级 实现思路
数据持久化 本地存储人生数据
历史对比 对比不同时期报告
分享功能 分享人生报告
AI建议 接入AI生成建议
社交功能 与他人对比

12.2 设计扩展

方向 描述
主题切换 多种配色主题
动画效果 报告生成动画
音效反馈 操作音效
导出PDF 导出报告为PDF

12.3 技术扩展

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 信息输入 报告生成 图表展示 数据持久化 历史对比 分享功能 AI建议 社交功能 导出PDF V1.0 基础版本 V1.1 增强版本 V1.2 智能版本 人生总结应用开发计划

十三、总结

人生总结应用通过数据化的方式帮助用户全面了解自己的人生状态。应用核心亮点包括:

13.1 核心特色

  1. 8个人生维度:全面评估人生各领域状态
  2. 时间分配分析:可视化展示时间使用情况
  3. 自动报告生成:智能分析生成人生报告
  4. 雷达图展示:直观展示维度评分
  5. 人生时间线:记录重要人生事件
  6. 目标管理:规划未来人生目标

13.2 技术亮点

  • 枚举类型设计:阶段、维度、时间分类使用枚举
  • CustomPainter:高效绘制雷达图和饼图
  • 智能分析:基于评分生成个性化建议
  • 指标计算:幸福指数、平衡指数等科学计算
  • Tab导航:四个页面平滑切换

13.3 应用价值

人生总结不仅是一个数据分析工具,更是一个帮助用户审视人生的平台。通过量化的方式呈现人生全貌,让用户更清晰地认识自己,发现优势和不足,获得改进方向。

回顾过去,把握现在,规划未来!


愿每个人都能书写精彩的人生篇章 📖

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐