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

一、项目概述

运行效果图

image-20260408215658333

image-20260408215706555

image-20260408215710697

1.1 应用简介

愤怒转化器是一款独特的情绪管理应用,将负面情绪转化为积极的创作能量。应用以橙红色为主色调,象征火焰与能量。界面设计采用动态火焰效果,将抽象的愤怒情绪转化为可视化的创作动力。

应用通过评估用户的愤怒程度,提供五种创作转化方式:文字创作、涂鸦绘画、音乐表达、运动释放和冥想转化。愤怒程度越高,转化后的创作能量越多。用户可以将每一次愤怒都变成一次创作机会,积累能量,记录成长。

1.2 核心功能

功能模块 功能描述 实现方式
愤怒评估 滑动选择愤怒程度 Slider组件
创作转化 五种转化方式选择 卡片网格
能量计算 根据愤怒值计算能量 算法计算
作品记录 保存转化作品 列表展示
统计分析 能量和类型统计 图表展示

1.3 愤怒等级体系

应用定义了四级愤怒程度:

等级 名称 颜色 分数范围 能量倍率
1 轻微愤怒 #FFEB3B 0-20 1.0x
2 中度愤怒 #FF9800 21-50 1.2x
3 高度愤怒 #FF5722 51-80 1.5x
4 极度愤怒 #F44336 81-100 2.0x

1.4 创作类型体系

类型 图标 颜色 说明
文字创作 edit #E91E63 写作、诗歌、日记
涂鸦绘画 brush #9C27B0 绘画、涂鸦、设计
音乐表达 music_note #2196F3 作曲、演奏、歌唱
运动释放 directions_run #4CAF50 跑步、健身、武术
冥想转化 self_improvement #00BCD4 冥想、呼吸、瑜伽

1.5 技术栈

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

1.6 项目结构

lib/
└── main_anger_converter.dart
    ├── AngerConverterApp           # 应用入口
    ├── AngerLevel                  # 愤怒等级枚举
    ├── CreationType                # 创作类型枚举
    ├── CreationWork                # 作品模型
    ├── AngerConverterHomePage      # 主页面(底部导航)
    ├── _buildConverterPage         # 转化页面
    ├── _buildWorksPage             # 作品页面
    ├── _buildStatsPage             # 统计页面
    └── FirePainter                 # 火焰绘制器

二、设计理念

2.1 愤怒转化可视化

愤怒转化系统

愤怒评估

创作转化

能量统计

程度选择

等级判定

火焰动画

类型选择

能量计算

作品保存

总能量统计

类型分布

等级分布

2.2 愤怒等级模型

愤怒等级

轻微愤怒

黄色标识

0-20分

基础能量

中度愤怒

橙色标识

21-50分

1.2倍能量

高度愤怒

深橙标识

51-80分

1.5倍能量

极度愤怒

红色标识

81-100分

2倍能量

2.3 色彩体系

应用采用橙红色为主色调:

颜色类型 色值 RGB 用途
主色 #FF5722 255,87,34 导航、按钮、强调
辅助色 #FF9800 255,152,0 渐变、次要元素
轻微愤怒 #FFEB3B 255,235,59 一级愤怒
中度愤怒 #FF9800 255,152,0 二级愤怒
高度愤怒 #FF5722 255,87,34 三级愤怒
极度愤怒 #F44336 244,67,54 四级愤怒

2.4 能量转化流程

作品列表 转化引擎 创作卡片 愤怒滑块 用户 作品列表 转化引擎 创作卡片 愤怒滑块 用户 调节愤怒程度 传递愤怒值 计算能量倍率 选择转化方式 触发转化 生成作品 保存作品 展示结果

三、系统架构

3.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
AngerConverterHomePage

转化页

作品页

统计页

火焰动画

愤怒滑块

创作卡片

作品列表

作品卡片

总览统计

类型分布

等级分布

愤怒评估
等级判定

能量计算
倍率算法

作品管理
CRUD操作

AngerLevel
愤怒等级

CreationType
创作类型

CreationWork
作品模型

3.2 类图设计

uses

uses

manages

has

AngerConverterApp

+Widget build()

«enumeration»

AngerLevel

+mild 轻微愤怒

+moderate 中度愤怒

+high 高度愤怒

+extreme 极度愤怒

+String label

+Color color

+int minScore

+int maxScore

+fromScore(int) : AngerLevel

«enumeration»

CreationType

+writing 文字创作

+painting 涂鸦绘画

+music 音乐表达

+movement 运动释放

+meditation 冥想转化

+String label

+IconData icon

+Color color

CreationWork

+String id

+DateTime createdAt

+CreationType type

+int angerLevel

+int energyGenerated

+String content

+String title

AngerConverterHomePage

-int _currentIndex

-int _angerScore

-List<CreationWork> _works

-AnimationController _fireAnimationController

-AnimationController _pulseAnimationController

-AnimationController _convertAnimationController

+AngerLevel get _currentLevel

+int get _totalEnergy

+void _startConversion()

+void _showCreationDialog()

3.3 能量转化流程

对话框 计算引擎 状态管理 滑块 用户 对话框 计算引擎 状态管理 滑块 用户 调节愤怒值 更新_angerScore 触发等级判定 返回等级和颜色 更新火焰动画 点击创作卡片 计算能量 生成作品 展示转化结果

四、核心功能实现

4.1 愤怒等级枚举

定义四级愤怒程度:

enum AngerLevel {
  mild('轻微愤怒', Color(0xFFFFEB3B), 1, 20),
  moderate('中度愤怒', Color(0xFFFF9800), 21, 50),
  high('高度愤怒', Color(0xFFFF5722), 51, 80),
  extreme('极度愤怒', Color(0xFFF44336), 81, 100);

  final String label;
  final Color color;
  final int minScore;
  final int maxScore;

  const AngerLevel(this.label, this.color, this.minScore, this.maxScore);

  static AngerLevel fromScore(int score) {
    for (var level in AngerLevel.values) {
      if (score >= level.minScore && score <= level.maxScore) {
        return level;
      }
    }
    return AngerLevel.extreme;
  }
}

4.2 创作类型枚举

定义五种创作转化方式:

enum CreationType {
  writing('文字创作', Icons.edit, Color(0xFFE91E63)),
  painting('涂鸦绘画', Icons.brush, Color(0xFF9C27B0)),
  music('音乐表达', Icons.music_note, Color(0xFF2196F3)),
  movement('运动释放', Icons.directions_run, Color(0xFF4CAF50)),
  meditation('冥想转化', Icons.self_improvement, Color(0xFF00BCD4));

  final String label;
  final IconData icon;
  final Color color;

  const CreationType(this.label, this.icon, this.color);
}

4.3 能量计算算法

根据愤怒值计算创作能量:

void _startConversion(CreationType type) {
  _convertAnimationController.forward(from: 0);
  Future.delayed(const Duration(milliseconds: 1500), () {
    _showCreationDialog(type);
  });
}

void _showCreationDialog(CreationType type) {
  final energyGenerated = (_angerScore * 1.5).round();
  final work = CreationWork(
    id: DateTime.now().millisecondsSinceEpoch.toString(),
    createdAt: DateTime.now(),
    type: type,
    angerLevel: _angerScore,
    energyGenerated: energyGenerated,
    title: _getRandomTitle(type),
  );
  // 显示对话框...
}

4.4 火焰动画绘制

动态火焰效果的绘制:

class FirePainter extends CustomPainter {
  final double animation;
  final Color color;

  
  void paint(Canvas canvas, Size size) {
    final center = Offset(size.width / 2, size.height / 2);
    final baseRadius = size.width / 3;

    // 绘制火焰
    for (int i = 0; i < 8; i++) {
      final angle = (2 * pi * i / 8) + (animation * 2 * pi);
      final flameHeight = baseRadius * (0.8 + 0.4 * sin(animation * 4 * pi + i));
      
      final path = Path();
      // 绘制火焰形状...
      canvas.drawPath(path, paint);
    }

    // 绘制核心
    final coreRadius = baseRadius * 0.4 * (1 + 0.1 * sin(animation * 6 * pi));
    canvas.drawCircle(center, coreRadius, corePaint);
  }
}

4.5 创作卡片

创作类型选择卡片:

Widget _buildCreationCard(CreationType type) {
  final energyBonus = (_angerScore * 0.3).round();
  return GestureDetector(
    onTap: () => _startConversion(type),
    child: Card(
      child: Container(
        decoration: BoxDecoration(
          gradient: LinearGradient(
            colors: [
              type.color.withOpacity(0.2),
              type.color.withOpacity(0.05),
            ],
          ),
        ),
        child: Column(
          children: [
            Container(
              padding: const EdgeInsets.all(10),
              decoration: BoxDecoration(
                color: type.color.withOpacity(0.2),
                borderRadius: BorderRadius.circular(12),
              ),
              child: Icon(type.icon, color: type.color),
            ),
            Text(type.label),
            Text('+$energyBonus'),
          ],
        ),
      ),
    ),
  );
}

4.6 统计计算

能量和作品统计:

int get _totalEnergy {
  return _works.fold(0, (sum, work) => sum + work.energyGenerated);
}

int get _totalWorks => _works.length;

String _getAverageEnergy() {
  if (_works.isEmpty) return '0';
  final avg = _totalEnergy / _works.length;
  return avg.toStringAsFixed(1);
}

五、UI设计规范

5.1 配色方案

应用采用橙红色为主色调:

颜色类型 色值 用途
主色 #FF5722 导航、按钮、强调
辅助色 #FF9800 渐变、次要元素
轻微愤怒 #FFEB3B 一级愤怒标识
中度愤怒 #FF9800 二级愤怒标识
高度愤怒 #FF5722 三级愤怒标识
极度愤怒 #F44336 四级愤怒标识

5.2 字体规范

元素 字号 字重 颜色
页面标题 20px Bold #000000
等级标签 20px Bold 等级颜色
愤怒数值 14px Regular #666666
创作类型 16px Bold #000000
能量数值 28px Bold 类型颜色

5.3 组件规范

5.3.1 火焰动画
        🔥
       /│\
      / │ \
     /  │  \
    ────┴────
    
  动态火焰效果
  颜色随愤怒等级变化
  脉动动画效果
5.3.2 创作卡片
┌─────────────────────────┐
│ ✏️ 文字创作        +15  │
│                         │
│    将愤怒转化为文字      │
└─────────────────────────┘
5.3.3 作品卡片
┌─────────────────────────────────────────┐
│  ●  愤怒的诗篇                           │
│  │  [愤怒 65]  [能量 +97]               │
│  │  2024-01-15                          │
└─────────────────────────────────────────┘

六、交互设计

6.1 转化页面交互

拖动滑块

点击卡片

查看提示

保存

继续

用户操作

操作类型

调整愤怒程度

开始转化

展开提示卡片

更新火焰动画

更新等级显示

播放转化动画

显示结果对话框

用户选择

添加到作品列表

关闭对话框

6.2 能量转化流程

列表 对话框 卡片 滑块 用户 列表 对话框 卡片 滑块 用户 调节愤怒值 更新等级和颜色 点击创作类型 显示转化动画 展示能量结果 点击保存 添加作品 更新列表显示

6.3 页面切换状态

点击作品Tab

点击统计Tab

点击转化Tab

点击统计Tab

点击转化Tab

点击作品Tab

转化页

作品页

统计页


七、数据分析

7.1 统计指标

统计项 计算方式 说明
总能量 所有作品能量之和 累计创作能量
作品数 _works.length 转化次数
平均能量 总能量/作品数 单次转化效率
类型分布 按类型统计数量 创作偏好

7.2 能量计算规则

愤怒等级 基础能量 倍率 最终能量
轻微愤怒 愤怒值 1.0x 愤怒值 × 1.0
中度愤怒 愤怒值 1.2x 愤怒值 × 1.2
高度愤怒 愤怒值 1.5x 愤怒值 × 1.5
极度愤怒 愤怒值 2.0x 愤怒值 × 2.0

7.3 类型分布分析

Map<CreationType, int> _calculateTypeDistribution() {
  final distribution = <CreationType, int>{};
  for (var type in CreationType.values) {
    distribution[type] = _works.where((w) => w.type == type).length;
  }
  return distribution;
}

7.4 时间分布分析

时间段 分析维度 应用价值
按日 日转化次数 了解每日情绪状态
按周 周能量统计 了解周期性规律
按月 月度趋势 了解长期变化
按类型 类型偏好 了解创作倾向

八、扩展功能规划

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 2024-03-24 愤怒评估 创作转化 作品记录 统计分析 作品编辑 分享功能 提醒功能 云端同步 社区分享 AI创作辅助 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 愤怒转化器开发计划

8.2 功能扩展建议

8.2.1 作品编辑

支持作品内容编辑:

  • 文字创作编辑器
  • 绘画工具集成
  • 音乐录制功能
  • 运动数据记录
8.2.2 分享功能

作品分享系统:

  • 生成分享图片
  • 社交平台分享
  • 匿名社区展示
  • 作品集导出
8.2.3 AI创作辅助

AI辅助创作功能:

  • 情绪识别建议
  • 创作灵感推荐
  • 风格转换建议
  • 能量优化分析

九、注意事项

9.1 开发注意事项

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

  2. 状态管理:使用setState管理本地状态,注意刷新时机

  3. 性能优化:火焰动画使用CustomPaint,避免过度重绘

  4. 用户体验:转化动画要流畅,结果展示要清晰

9.2 常见问题

问题 原因 解决方案
火焰不显示 动画未启动 检查repeat调用
颜色不更新 状态未刷新 检查setState
能量计算错误 倍率配置问题 检查计算公式
作品不保存 列表未更新 检查insert操作

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_anger_converter.dart --web-port 8132

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

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

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

十一、总结

愤怒转化器是一款独特的情绪管理应用,将负面情绪转化为积极的创作能量。应用以橙红色为主色调,采用动态火焰效果,将抽象的愤怒情绪转化为可视化的创作动力。

从技术实现来看,应用使用CustomPaint绘制动态火焰效果,通过Slider组件评估愤怒程度,使用AnimationController实现脉动和转化动画。四级愤怒等级和五种创作类型让转化过程更加丰富和个性化。

从用户体验来看,应用提供直观的火焰动画展示,让用户能够实时感受愤怒程度。通过滑动选择愤怒值,点击创作卡片开始转化,操作简单直观。作品记录功能让用户追踪转化历程,统计功能让用户了解自己的创作偏好。

应用不仅是一个情绪管理工具,更是一个创作激励平台。它提醒我们:愤怒不是敌人,而是创作的燃料;愤怒程度越高,转化后的能量越多;选择适合你的创作方式,释放情绪;每一次愤怒都是一次成长的机会。在快节奏的现代生活中,愤怒转化器为我们提供了一种将负面情绪转化为正面能量的方式。

将愤怒转化为创作的力量

Logo

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

更多推荐