梦境记录应用


欢迎加入开源鸿蒙跨平台社区:
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;                  // 清晰度(1-5星)
  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);

// 在UI中使用
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 内存管理


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

# 运行到Windows
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 设计扩展

方向 描述
梦境日历 按日期查看梦境分布
梦境地图 记录梦中出现的地点
梦境音乐 添加背景音乐氛围
梦境分享 分享梦境到社交平台

十三、总结

梦境记录应用通过简洁的记录界面和智能的主题分析,帮助用户探索潜意识世界。应用核心亮点包括:

  1. 深色主题:神秘的梦境氛围,星空元素
  2. 智能分析:自动识别12种梦境主题
  3. 关键词提取:提取梦境核心关键词
  4. 多维记录:情绪、清晰度、清醒梦标记
  5. 统计分析:主题分布可视化

应用代码结构清晰,约700行,无第三方依赖,易于理解和维护。后续可扩展数据持久化、AI解梦、梦境图谱等功能,提供更完整的梦境探索体验。

记录梦境,探索内心深处的秘密!

Logo

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

更多推荐