梦境记录应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图



1.1 应用简介
梦境记录是一款帮助用户记录和分析梦境的创意应用。用户可以在醒来后立刻记录梦境内容,应用会自动分析梦境主题、提取关键词,帮助用户探索潜意识世界。深色主题配合星空元素,营造出神秘的梦境氛围。
应用核心理念:记录梦境,探索内心深处的秘密。
1.2 核心功能
| 功能模块 |
功能描述 |
实现方式 |
| 梦境记录 |
标题、内容、情绪、清晰度 |
TextField + 选择器 |
| 主题分析 |
自动识别梦境主题 |
关键词匹配算法 |
| 关键词提取 |
提取梦境关键词 |
文本分析 |
| 清醒梦标记 |
标记清醒梦状态 |
开关控件 |
| 历史记录 |
梦境列表管理 |
内存存储 |
| 统计分析 |
主题分布统计 |
数据聚合计算 |
1.3 梦境主题分类
| 主题 |
关键词示例 |
表情符号 |
| 飞行 |
飞、天空、翅膀、漂浮 |
🦋 |
| 追逐 |
追、跑、逃、躲、怪物 |
🏃 |
| 坠落 |
掉、坠落、悬崖、高楼 |
⬇️ |
| 水 |
水、海、河、游泳、淹 |
🌊 |
| 死亡 |
死、葬礼、坟墓、鬼 |
👻 |
| 考试 |
考试、学校、老师、作业 |
📝 |
| 旅行 |
旅行、火车、飞机、陌生 |
✈️ |
| 家庭 |
家人、父母、孩子、家 |
🏠 |
| 爱情 |
爱、恋人、结婚、约会 |
💕 |
| 动物 |
狗、猫、蛇、鸟、鱼 |
🐾 |
| 自然 |
森林、山、花、树、草 |
🌿 |
| 超自然 |
魔法、超能力、神仙、妖怪 |
✨ |
1.4 技术栈
| 技术领域 |
技术选型 |
版本要求 |
| 开发框架 |
Flutter |
>= 3.0.0 |
| 编程语言 |
Dart |
>= 2.17.0 |
| 设计规范 |
Material Design 3 |
- |
| 状态管理 |
setState |
- |
| 动画控制 |
AnimationController |
- |
| 目标平台 |
鸿蒙OS |
API 21+ |
二、项目结构
lib/
├── main_dream_journal.dart # 应用主入口(~700行)
│ ├── DreamJournalApp # 根应用组件
│ ├── Dream # 梦境数据模型
│ ├── DreamAnalyzer # 梦境分析器
│ └── DreamJournalHomePage # 主页面
三、数据模型
3.1 Dream 模型
class Dream {
final String id;
String title;
String content;
final DateTime createdAt;
String mood;
int clarity;
List<String> themes;
List<String> keywords;
bool isLucid;
Dream({
required this.id,
required this.title,
required this.content,
required this.createdAt,
this.mood = '平静',
this.clarity = 3,
List<String>? themes,
List<String>? keywords,
this.isLucid = false,
});
}
3.2 情绪分类
| 情绪 |
表情符号 |
说明 |
| 平静 |
😌 |
安详、平和的梦境 |
| 开心 |
😊 |
愉快、美好的梦境 |
| 兴奋 |
🤩 |
刺激、激动的梦境 |
| 害怕 |
😨 |
恐惧、紧张的梦境 |
| 焦虑 |
😰 |
担忧、不安的梦境 |
| 悲伤 |
😢 |
难过、伤心的梦境 |
| 困惑 |
😕 |
迷茫、不解的梦境 |
| 神秘 |
🔮 |
奇异、未知的梦境 |
四、核心功能实现
4.1 梦境主题分析
通过关键词匹配识别梦境主题:
class DreamAnalyzer {
static final Map<String, List<String>> _themeKeywords = {
'飞行': ['飞', '天空', '翅膀', '漂浮', '云', '鸟'],
'追逐': ['追', '跑', '逃', '躲', '怪物', '害怕'],
'坠落': ['掉', '坠落', '悬崖', '高楼', '失重'],
};
static List<String> analyzeThemes(String content) {
final themes = <String>[];
final lowerContent = content.toLowerCase();
_themeKeywords.forEach((theme, keywords) {
for (var keyword in keywords) {
if (lowerContent.contains(keyword)) {
if (!themes.contains(theme)) {
themes.add(theme);
}
break;
}
}
});
return themes.isEmpty ? ['未知'] : themes;
}
}
4.2 关键词提取
从梦境内容中提取关键词:
static List<String> extractKeywords(String content) {
final keywords = <String>[];
final words = content
.replaceAll(RegExp(r'[,。!?、;:""''()\s]'), ' ')
.split(' ');
for (var word in words) {
if (word.length >= 2 && word.length <= 4 && !keywords.contains(word)) {
if (_isKeyword(word)) {
keywords.add(word);
}
}
}
return keywords.take(5).toList();
}
4.3 梦境保存流程
void _saveDream() {
if (_contentController.text.trim().isEmpty) {
_showSnackBar('请输入梦境内容');
return;
}
final title = _titleController.text.trim().isEmpty
? '梦境 #${_dreams.length + 1}'
: _titleController.text.trim();
final themes = DreamAnalyzer.analyzeThemes(_contentController.text);
final keywords = DreamAnalyzer.extractKeywords(_contentController.text);
final dream = Dream(
id: DateTime.now().millisecondsSinceEpoch.toString(),
title: title,
content: _contentController.text,
createdAt: DateTime.now(),
mood: _selectedMood,
clarity: _selectedClarity,
themes: themes,
keywords: keywords,
isLucid: _isLucid,
);
setState(() {
_dreams.insert(0, dream);
_currentDream = dream;
_isEditing = true;
});
}
五、UI设计
5.1 色彩系统
| 用途 |
色值 |
说明 |
| 主色调 |
#6B5B95 |
紫色,神秘梦境 |
| 背景渐变1 |
#1a1a2e |
深蓝黑,夜空 |
| 背景渐变2 |
#16213e |
深蓝,星空 |
| 背景渐变3 |
#0f0f23 |
近黑,深邃 |
| 强调色 |
#FDCB6E |
金黄,星级 |
| 文字色 |
#FFFFFF |
白色,清晰 |
5.2 页面结构
┌─────────────────────────────────┐
│ 🌙 梦境记录 │ ← 深色头部
│ 记录你的梦境,探索潜意识 │ (浮动月亮动画)
│ ┌─────────┐ ┌─────────┐ │
│ │记录 5 │ │清醒梦 2 │ │ ← 统计卡片
│ └─────────┘ └─────────┘ │
├─────────────────────────────────┤
│ ✏️ 记录新梦境 │
│ ┌─────────────────────────┐ │
│ │ 梦境标题(可选) │ │ ← 标题输入
│ └─────────────────────────┘ │
│ ┌─────────────────────────┐ │
│ │ 描述你的梦境... │ │ ← 内容输入
│ │ │ │
│ └─────────────────────────┘ │
│ 梦境情绪 │
│ [😌平静] [😊开心] [😨害怕]... │ ← 情绪选择
│ 清晰度 │
│ ⭐⭐⭐☆☆ │ ← 星级选择
│ 清醒梦 [开关] │ ← 清醒梦标记
│ ┌─────────────────────────┐ │
│ │ 💾 保存梦境 │ │ ← 保存按钮
│ └─────────────────────────┘ │
├─────────────────────────────────┤
│ 📊 梦境分析 │
│ 主题分析 │
│ [🦋飞行] [🌊水] [🏠家庭] │ ← 分析结果
│ 关键词 │
│ [天空] [飞翔] [自由] │
├─────────────────────────────────┤
│ 📈 梦境统计 │
│ 🦋 飞行 ████████ 40% │ ← 主题统计
│ 🌊 水 ██████ 30% │
│ 🏃 追逐 ████ 20% │
├─────────────────────────────────┤
│ ▼ 梦境历史 │
│ ┌─────────────────────────┐ │
│ │ 😌 梦境 #5 ⭐⭐⭐ 🗑️│ │ ← 梦境卡片
│ │ 1/15 07:30 │ │
│ │ 我梦见自己在天空中飞翔 │ │
│ │ [🦋飞行] [✨超自然] │ │
│ └─────────────────────────┘ │
└─────────────────────────────────┘
5.3 交互设计
| 交互元素 |
触发方式 |
响应行为 |
| 情绪标签 |
点击 |
切换选中状态 |
| 星级 |
点击 |
设置清晰度 |
| 清醒梦开关 |
切换 |
标记清醒梦状态 |
| 保存按钮 |
点击 |
保存梦境 + 分析 |
| 梦境卡片 |
点击 |
打开编辑 |
| 删除按钮 |
点击 |
删除梦境 |
六、动画详解
6.1 月亮浮动动画
头部月亮图标有上下浮动效果:
_floatController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 3000),
)..repeat(reverse: true);
Transform.translate(
offset: Offset(0, _floatController.value * 5),
child: Container(...),
)
6.2 动画参数
| 动画 |
时长 |
效果 |
| 月亮浮动 |
3000ms |
上下5px浮动 |
| 脉冲效果 |
2000ms |
呼吸灯效果 |
七、状态管理
7.1 状态分类
| 状态类型 |
状态名称 |
说明 |
| 梦境列表 |
_dreams |
所有梦境记录 |
| 当前梦境 |
_currentDream |
正在编辑的梦境 |
| 编辑状态 |
_isEditing |
是否在编辑模式 |
| 标题输入 |
_titleController |
标题输入框 |
| 内容输入 |
_contentController |
内容输入框 |
| 情绪选择 |
_selectedMood |
当前选中情绪 |
| 清晰度 |
_selectedClarity |
当前清晰度 |
| 清醒梦 |
_isLucid |
是否清醒梦 |
7.2 状态流转
八、梦境分析算法
8.1 主题识别流程
8.2 关键词提取流程
8.3 算法优化建议
| 优化方向 |
当前实现 |
改进方案 |
| 分词方式 |
简单空格分词 |
使用jieba分词 |
| 主题识别 |
关键词匹配 |
NLP语义分析 |
| 情感分析 |
用户选择 |
自动情感识别 |
| 梦境相似度 |
无 |
向量相似度计算 |
九、性能优化
9.1 渲染优化
| 优化点 |
实现方式 |
效果 |
| 列表优化 |
SliverList |
只渲染可见项 |
| 动画优化 |
AnimatedBuilder |
只重绘动画部分 |
| 状态更新 |
精准setState |
避免不必要的重建 |
9.2 内存管理
@override
void dispose() {
_titleController.dispose();
_contentController.dispose();
_floatController.dispose();
_pulseController.dispose();
super.dispose();
}
9.3 性能指标
| 指标 |
目标值 |
实测值 |
| 动画帧率 |
60fps |
60fps |
| 内存占用 |
< 50MB |
待测试 |
| 启动时间 |
< 2s |
待测试 |
十、常见问题
10.1 问题排查
| 问题 |
原因 |
解决方案 |
| 主题分析不准确 |
关键词库不完整 |
扩充关键词库 |
| 梦境保存失败 |
内容为空 |
添加非空校验 |
| 动画卡顿 |
控制器未释放 |
检查dispose调用 |
| 统计数据错误 |
计算逻辑错误 |
检查聚合逻辑 |
10.2 调试技巧
debugPrint('Current Dream: ${_currentDream?.title}');
debugPrint('Themes: ${_currentDream?.themes}');
final themes = DreamAnalyzer.analyzeThemes('我梦见自己在飞');
debugPrint('Analyzed themes: $themes');
十一、运行说明
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_dream_journal.dart
flutter run -d windows -t lib/main_dream_journal.dart
flutter analyze lib/main_dream_journal.dart
十二、扩展建议
12.1 功能扩展
| 功能 |
优先级 |
实现思路 |
| 数据持久化 |
高 |
使用SharedPreferences或SQLite |
| 梦境导出 |
中 |
导出为PDF或文本文件 |
| 梦境搜索 |
中 |
按关键词、主题搜索 |
| 梦境标签 |
中 |
自定义标签系统 |
| 梦境图谱 |
低 |
可视化梦境关联 |
| AI解梦 |
低 |
集成AI API进行解梦 |
12.2 设计扩展
| 方向 |
描述 |
| 梦境日历 |
按日期查看梦境分布 |
| 梦境地图 |
记录梦中出现的地点 |
| 梦境音乐 |
添加背景音乐氛围 |
| 梦境分享 |
分享梦境到社交平台 |
十三、总结
梦境记录应用通过简洁的记录界面和智能的主题分析,帮助用户探索潜意识世界。应用核心亮点包括:
- 深色主题:神秘的梦境氛围,星空元素
- 智能分析:自动识别12种梦境主题
- 关键词提取:提取梦境核心关键词
- 多维记录:情绪、清晰度、清醒梦标记
- 统计分析:主题分布可视化
应用代码结构清晰,约700行,无第三方依赖,易于理解和维护。后续可扩展数据持久化、AI解梦、梦境图谱等功能,提供更完整的梦境探索体验。
记录梦境,探索内心深处的秘密!
所有评论(0)