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

一、项目概述

运行效果图

image-20260407231007982

image-20260407231014853

image-20260407231026598

image-20260407231038656

1.1 应用简介

情绪过山车是一款独特的情绪体验应用,它故意制造情绪波动,让用户在安全的环境中体验情感的极限。通过精心设计的情绪触发场景,用户可以经历从狂喜到绝望、从愤怒到平静的完整情绪光谱,从而更好地理解和管理自己的情绪。

应用以过山车为隐喻,将情绪体验设计成一场刺激的旅程。每一次"乘坐"都是一次情感的冒险,用户将在不同的情绪站点停留,感受各种极端情绪的冲击。这种刻意设计的情绪波动,实际上是一种情绪训练——通过体验极限情绪,我们能够更好地应对日常生活中的情绪起伏。

应用采用动态渐变色彩设计,根据当前情绪实时调整界面色调,营造出沉浸式的情绪体验氛围。深色主题配合情绪色彩,既保护用户隐私,又增强了情感表达力。

1.2 核心功能

功能模块 功能描述 实现方式
情绪过山车 体验情绪波动旅程 场景触发+动画过渡
情绪触发器 精心设计的情绪场景 文字描述+情感渲染
情绪可视化 过山车轨道图形化 CustomPaint绘制
情绪记录 记录每次情绪体验 时间线列表
情绪分析 统计分析情绪分布 数据可视化
情绪洞察 提供情绪管理建议 智能提示

1.3 情绪类型

应用包含八种核心情绪类型,覆盖了人类情感体验的主要维度:

序号 情绪类型 图标 颜色 强度 描述
1 狂喜 🎉 #FFD700 100% 极度的快乐与兴奋
2 喜悦 😊 #FFA500 80% 内心的满足与幸福
3 平静 😌 #87CEEB 50% 宁静与安详
4 中性 😐 #808080 50% 无明显的情绪波动
5 悲伤 😢 #4169E1 30% 内心的失落与忧郁
6 愤怒 😠 #FF0000 90% 强烈的愤怒与不满
7 恐惧 😨 #8B0000 85% 内心的不安与害怕
8 绝望 😭 #000080 10% 深深的绝望与无助

1.4 技术栈

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

1.5 项目结构

lib/
└── main_emotion_roller_coaster.dart
    ├── EmotionRollerCoasterApp           # 应用入口
    ├── EmotionType                       # 情绪类型枚举
    ├── EmotionTrigger                    # 情绪触发器模型
    ├── EmotionRecord                     # 情绪记录模型
    ├── CoasterPoint                      # 过山车轨迹点
    ├── EmotionRollerCoasterHomePage      # 主页面(底部导航)
    ├── _buildRidePage                    # 过山车页面
    ├── _buildHistoryPage                 # 历史页面
    ├── _buildAnalysisPage                # 分析页面
    └── CoasterPainter                    # 过山车轨迹绘制器

二、设计理念

2.1 情绪过山车隐喻

正面情绪

正面情绪

中性情绪

负面情绪

负面情绪

负面情绪

负面情绪

开始旅程

情绪触发

情绪类型

狂喜站点

喜悦站点

平静站点

悲伤站点

愤怒站点

恐惧站点

绝望站点

情绪体验

记录情绪

是否继续?

旅程结束

情绪分析

洞察建议

2.2 情绪强度模型

应用采用情绪强度模型,将每种情绪量化为0-100的强度值:

情绪强度 0-100

低强度 0-30

中强度 31-70

高强度 71-100

绝望/悲伤

平静/中性

狂喜/愤怒/恐惧

2.3 情绪训练理论

应用基于以下心理学理论设计:

情绪暴露疗法:通过在安全环境中暴露于各种情绪,用户可以逐渐适应情绪波动,提高情绪调节能力。

正念觉察:应用鼓励用户在体验情绪时保持觉察,观察情绪的起伏变化,而不被情绪所控制。

情绪智力训练:通过识别和命名各种情绪,用户可以提高情绪智力,更好地理解自己和他人的情感。

2.4 设计哲学

情绪过山车

核心理念

体验极限情绪

理解情绪本质

接受情绪波动

提升情绪智力

设计原则

安全的环境

渐进的体验

深度的反思

持续的成长

用户价值

情绪认知

情绪管理

心理韧性

自我觉察


三、系统架构

3.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
EmotionRollerCoasterHomePage

过山车页

历史页

分析页

情绪卡片

过山车可视化

触发器对话框

记录列表

统计卡片

分布图表

洞察建议

情绪引擎
场景触发系统

情绪计算器
强度计算

情绪分析器
统计分析

EmotionType
情绪类型

EmotionTrigger
触发器模型

EmotionRecord
记录模型

3.2 类图设计

uses

manages

records

visualizes

EmotionRollerCoasterApp

+Widget build()

«enumeration»

EmotionType

+ecstasy 狂喜

+joy 喜悦

+calm 平静

+neutral 中性

+sadness 悲伤

+anger 愤怒

+fear 恐惧

+despair 绝望

+String label

+String emoji

+Color color

+int intensity

+String description

EmotionTrigger

+String id

+String title

+String content

+EmotionType targetEmotion

+int duration

+String category

EmotionRecord

+String id

+EmotionType emotion

+int intensity

+DateTime timestamp

+String trigger

CoasterPoint

+double x

+double y

+EmotionType emotion

+double progress

EmotionRollerCoasterHomePage

-int _currentIndex

-List<EmotionTrigger> _triggers

-List<EmotionRecord> _records

-EmotionType _currentEmotion

-int _currentIntensity

-bool _isRiding

-double _rideProgress

-AnimationController _coasterController

-AnimationController _pulseController

+void _startRide()

+void _processNextTrigger()

+void _showEmotionTriggerDialog()

+void _recordEmotion()

CoasterPainter

+List<EmotionType> emotions

+double progress

+EmotionType currentEmotion

+void paint()

+bool shouldRepaint()

3.3 情绪体验流程时序图

可视化 情绪记录 触发器对话框 情绪引擎 过山车页 用户 可视化 情绪记录 触发器对话框 情绪引擎 过山车页 用户 loop [每个情绪触发器] 点击开始过山车 启动情绪旅程 显示情绪场景 展示情绪描述 体验并继续 记录情绪体验 更新过山车轨迹 旅程结束 显示完成对话框

四、核心功能实现

4.1 情绪触发系统

情绪触发器是应用的核心组件,每个触发器都经过精心设计,旨在引发特定的情绪反应:

class EmotionTrigger {
  final String id;              // 唯一标识
  final String title;           // 触发器标题
  final String content;         // 情绪描述内容
  final EmotionType targetEmotion;  // 目标情绪
  final int duration;           // 持续时间(秒)
  final String category;        // 分类标签
}

触发器设计原则:

  1. 情境真实:描述贴近生活的真实场景
  2. 情感共鸣:使用富有感染力的语言
  3. 渐进体验:从温和到强烈的情绪过渡
  4. 多样覆盖:覆盖各种情绪类型和强度

4.2 情绪过山车可视化

过山车轨迹的绘制使用CustomPaint实现,将情绪强度映射为轨迹高度:

class CoasterPainter extends CustomPainter {
  final List<EmotionType> emotions;
  final double progress;
  final EmotionType currentEmotion;

  
  void paint(Canvas canvas, Size size) {
    final path = Path();
    final points = <Offset>[];

    // 计算每个情绪点的位置
    for (int i = 0; i < emotions.length; i++) {
      final x = (i / (emotions.length - 1)) * size.width;
      final intensity = emotions[i].intensity;
      final y = size.height - (intensity / 100 * size.height * 0.8) - 20;
      points.add(Offset(x, y));
    }

    // 绘制平滑曲线
    for (int i = 0; i < points.length; i++) {
      if (i == 0) {
        path.moveTo(points[i].dx, points[i].dy);
      } else {
        // 使用贝塞尔曲线连接点
        final prevPoint = points[i - 1];
        final controlPoint1 = Offset((prevPoint.dx + points[i].dx) / 2, prevPoint.dy);
        final controlPoint2 = Offset((prevPoint.dx + points[i].dx) / 2, points[i].dy);
        path.cubicTo(
          controlPoint1.dx, controlPoint1.dy,
          controlPoint2.dx, controlPoint2.dy,
          points[i].dx, points[i].dy,
        );
      }
    }

    // 绘制路径和当前进度点
    canvas.drawPath(path, paint);
    
    // 绘制当前位置指示器
    if (progress > 0) {
      final currentIndex = (progress * (emotions.length - 1)).floor();
      if (currentIndex < points.length) {
        canvas.drawCircle(points[currentIndex], 12, circlePaint);
      }
    }
  }
}

4.3 情绪触发对话框

情绪触发对话框是用户与情绪交互的主要界面:

void _showEmotionTriggerDialog(EmotionTrigger trigger) {
  // 更新当前情绪状态
  setState(() {
    _currentEmotion = trigger.targetEmotion;
    _currentIntensity = trigger.targetEmotion.intensity;
  });

  // 显示情绪体验对话框
  showDialog(
    context: context,
    barrierDismissible: false,
    builder: (context) => AlertDialog(
      backgroundColor: trigger.targetEmotion.color.withValues(alpha: 0.95),
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
      title: Row(
        children: [
          Text(trigger.targetEmotion.emoji, style: const TextStyle(fontSize: 36)),
          const SizedBox(width: 12),
          Expanded(
            child: Text(
              trigger.title,
              style: const TextStyle(color: Colors.white, fontSize: 22),
            ),
          ),
        ],
      ),
      content: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          // 情绪描述内容
          Container(
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white.withValues(alpha: 0.2),
              borderRadius: BorderRadius.circular(16),
            ),
            child: Text(
              trigger.content,
              style: const TextStyle(color: Colors.white, fontSize: 16),
              textAlign: TextAlign.center,
            ),
          ),
          const SizedBox(height: 20),
          // 情绪强度条
          _buildIntensityBar(trigger.targetEmotion),
        ],
      ),
      actions: [
        TextButton(
          onPressed: () {
            Navigator.pop(context);
            _recordEmotion(trigger);
            _currentTriggerIndex++;
            _rideProgress = _currentTriggerIndex / _triggers.length;
            
            // 继续下一个触发器
            Future.delayed(const Duration(milliseconds: 500), () {
              _processNextTrigger();
            });
          },
          child: const Text('继续体验', style: TextStyle(color: Colors.white)),
        ),
      ],
    ),
  );
}

4.4 情绪记录与分析

情绪记录系统会记录每次情绪体验的详细信息:

class EmotionRecord {
  final String id;              // 唯一标识
  final EmotionType emotion;    // 情绪类型
  final int intensity;          // 情绪强度
  final DateTime timestamp;     // 时间戳
  final String trigger;         // 触发器名称
}

情绪分析功能:

Widget _buildEmotionDistribution(Map<EmotionType, int> emotionCounts) {
  return Container(
    padding: const EdgeInsets.all(20),
    child: Column(
      children: EmotionType.values.map((emotion) {
        final count = emotionCounts[emotion] ?? 0;
        final total = _records.length;
        final percentage = total > 0 ? (count / total * 100) : 0.0;

        return Row(
          children: [
            Text(emotion.emoji, style: const TextStyle(fontSize: 20)),
            const SizedBox(width: 12),
            Expanded(
              child: Column(
                children: [
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Text(emotion.label),
                      Text('$count次 (${percentage.toStringAsFixed(1)}%)'),
                    ],
                  ),
                  // 进度条
                  Container(
                    height: 6,
                    child: FractionallySizedBox(
                      alignment: Alignment.centerLeft,
                      widthFactor: percentage / 100,
                      child: Container(
                        decoration: BoxDecoration(
                          color: emotion.color,
                          borderRadius: BorderRadius.circular(3),
                        ),
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        );
      }).toList(),
    ),
  );
}

五、UI设计规范

5.1 配色方案

应用采用动态配色方案,根据当前情绪实时调整界面色调:

情绪类型 主色 辅助色 用途
狂喜 #FFD700 #FFA500 金色系,象征荣耀与辉煌
喜悦 #FFA500 #FF8C00 橙色系,象征温暖与活力
平静 #87CEEB #4682B4 天蓝色,象征宁静与宽广
中性 #808080 #A9A9A9 灰色系,象征平衡与中立
悲伤 #4169E1 #0000CD 蓝色系,象征忧郁与深沉
愤怒 #FF0000 #DC143C 红色系,象征激情与力量
恐惧 #8B0000 #B22222 深红色,象征危险与警告
绝望 #000080 #191970 深蓝色,象征黑暗与深渊

5.2 字体规范

元素 字号 字重 颜色
应用标题 28px Bold #FFFFFF
情绪标签 28px Bold 动态颜色
情绪描述 16px Normal #FFFFFF
强度数值 14px Regular #FFFFFF70
辅助文字 12-14px Regular #FFFFFF80

5.3 组件规范

5.3.1 情绪卡片
┌─────────────────────────────────────────────────┐
│                                                 │
│                  🎉  狂喜                       │
│                                                 │
│              强度: 100%                         │
│                                                 │
│         极度的快乐与兴奋                         │
│                                                 │
└─────────────────────────────────────────────────┘
5.3.2 过山车可视化
    🎉                                    😠
     ╲                                  ╱
      ╲                                ╱
       ╲          😊                ╱
        ╲        ╱  ╲              ╱
         ╲      ╱    ╲            ╱
          ╲    ╱      ╲          ╱
           ╲  ╱        😌      ╱
            ╲╱            ╲   ╱
             ────────────────╲╱────────
                           😢
5.3.3 情绪强度条
┌─────────────────────────────────────────────────┐
│ 0%                                    100%      │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│              ████████████████                   │
└─────────────────────────────────────────────────┘

六、交互设计

6.1 情绪体验流程

记录系统 对话框 触发器 过山车页 用户 记录系统 对话框 触发器 过山车页 用户 loop [每个触发器] 点击开始过山车 初始化旅程状态 获取下一个触发器 返回触发器数据 显示情绪体验 展示情绪描述 点击继续体验 记录情绪体验 更新进度 显示完成对话框 查看分析或重新开始

6.2 情绪波动曲线

中性

喜悦

狂喜

平静

悲伤

愤怒

恐惧

绝望

平静

6.3 页面切换状态

点击历史Tab

点击分析Tab

点击过山车Tab

点击分析Tab

点击过山车Tab

点击历史Tab

开始旅程

旅程结束

过山车页

历史页

分析页

情绪体验


七、心理学基础

7.1 情绪理论

应用基于以下情绪理论设计:

基本情绪理论:保罗·艾克曼提出的基本情绪理论认为,人类有六种基本情绪:快乐、悲伤、愤怒、恐惧、惊讶和厌恶。应用在此基础上扩展了八种情绪类型。

情绪维度理论:罗素的情绪环形模型将情绪分为两个维度:愉悦度和唤醒度。应用的情绪强度值正是基于这一理论。

情绪调节理论:詹姆斯·格罗斯的情绪调节理论指出,通过情境选择、情境修正、注意力分配、认知改变和反应调整等策略,可以有效调节情绪。

7.2 情绪训练方法

情绪训练

情绪识别

情绪接受

情绪表达

情绪调节

命名情绪

识别强度

觉察身体反应

不评判

不抗拒

允许存在

语言表达

艺术表达

身体表达

认知重评

正念冥想

行为激活

7.3 情绪智力模型

应用旨在提升用户的情绪智力,包括以下四个维度:

维度 描述 应用功能
情绪感知 识别和理解自己及他人的情绪 情绪识别训练
情绪运用 利用情绪促进思考和行动 情绪触发场景
情绪理解 理解情绪的复杂性和变化规律 情绪分析功能
情绪管理 调节和管理自己及他人的情绪 情绪洞察建议

八、扩展功能规划

8.1 后续版本规划

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情绪对话 情绪日记 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 情绪过山车开发计划

8.2 功能扩展建议

8.2.1 自定义触发器

允许用户创建自己的情绪触发场景:

  • 编写个人化的情绪描述
  • 选择目标情绪类型
  • 设置情绪强度
  • 分享给其他用户
8.2.2 音效系统

为情绪体验添加沉浸式音效:

  • 不同情绪类型的背景音乐
  • 环境音效(雨声、风声等)
  • 心跳声效增强真实感
  • 用户自定义音效
8.2.3 社区场景

建立情绪体验社区:

  • 用户分享情绪场景
  • 点赞和评论功能
  • 热门场景推荐
  • 情绪故事分享

九、注意事项

9.1 开发注意事项

  1. 情绪强度:确保情绪强度值合理,避免过度极端

  2. 动画控制:AnimationController需要在dispose时释放

  3. 状态管理:使用setState管理本地状态

  4. 用户隐私:情绪记录属于敏感信息,需妥善保护

9.2 常见问题

问题 原因 解决方案
过山车不显示 CustomPaint未正确实现 检查CoasterPainter
情绪颜色不变 状态未更新 检查setState调用
触发器不显示 列表为空 检查_triggers初始化
进度不更新 进度计算错误 检查_rideProgress计算

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_emotion_roller_coaster.dart --web-port 8122

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

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

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

十一、总结

情绪过山车是一款独特的情绪体验应用,它通过刻意制造情绪波动,让用户在安全的环境中体验情感的极限。应用以过山车为隐喻,将情绪体验设计成一场刺激的旅程,用户将在不同的情绪站点停留,感受各种极端情绪的冲击。

从技术实现来看,应用使用CustomPaint绘制过山车轨迹,将情绪强度映射为轨迹高度;通过精心设计的情绪触发器引发特定情绪反应;采用动态配色方案,根据当前情绪实时调整界面色调。从心理学基础来看,应用融合了基本情绪理论、情绪维度理论和情绪调节理论,旨在提升用户的情绪智力。

应用不仅是一个情绪体验工具,更是一个情绪训练平台。它提醒我们:情绪就像过山车,有起有落才是人生的真谛;体验极限情绪,才能更好地管理日常情绪;所有情绪都是暂时的,都会过去。在这个充满情绪波动的时代,情绪过山车为我们提供了一种全新的情绪管理方式——通过体验极限,获得平静。

**体验情绪的极限,拥抱内心的平静
Logo

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

更多推荐