Flutter 框架跨平台鸿蒙开发 - 愤怒转化器应用
愤怒转化器:情绪管理应用摘要 愤怒转化器是一款基于鸿蒙/Flutter的情绪管理应用,通过可视化方式将负面情绪转化为创作能量。核心功能包括:愤怒等级评估(四级滑动选择)、五种创作转化方式(文字、绘画、音乐等)、动态火焰动画反馈及作品统计系统。采用橙红色视觉体系,结合Material Design 3规范,实现愤怒值-能量倍率算法(最高2倍加成),支持作品存档与多维数据分析。技术栈包含Flutter
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图



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 愤怒等级模型
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 整体架构图
3.2 类图设计
3.3 能量转化流程
四、核心功能实现
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 页面切换状态
七、数据分析
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 后续版本规划
8.2 功能扩展建议
8.2.1 作品编辑
支持作品内容编辑:
- 文字创作编辑器
- 绘画工具集成
- 音乐录制功能
- 运动数据记录
8.2.2 分享功能
作品分享系统:
- 生成分享图片
- 社交平台分享
- 匿名社区展示
- 作品集导出
8.2.3 AI创作辅助
AI辅助创作功能:
- 情绪识别建议
- 创作灵感推荐
- 风格转换建议
- 能量优化分析
九、注意事项
9.1 开发注意事项
-
动画控制:AnimationController需要在dispose时释放
-
状态管理:使用setState管理本地状态,注意刷新时机
-
性能优化:火焰动画使用CustomPaint,避免过度重绘
-
用户体验:转化动画要流畅,结果展示要清晰
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实现脉动和转化动画。四级愤怒等级和五种创作类型让转化过程更加丰富和个性化。
从用户体验来看,应用提供直观的火焰动画展示,让用户能够实时感受愤怒程度。通过滑动选择愤怒值,点击创作卡片开始转化,操作简单直观。作品记录功能让用户追踪转化历程,统计功能让用户了解自己的创作偏好。
应用不仅是一个情绪管理工具,更是一个创作激励平台。它提醒我们:愤怒不是敌人,而是创作的燃料;愤怒程度越高,转化后的能量越多;选择适合你的创作方式,释放情绪;每一次愤怒都是一次成长的机会。在快节奏的现代生活中,愤怒转化器为我们提供了一种将负面情绪转化为正面能量的方式。
将愤怒转化为创作的力量
更多推荐




所有评论(0)