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

一、项目概述

运行效果图

image-20260410184915400

image-20260410184921259

image-20260410184931896

image-20260410185006654

image-20260410185013615

1.1 应用简介

梦境场景重现是一款创意娱乐应用,通过AI技术将抽象的梦境描述转化为可视化的场景图像。用户只需描述自己的梦境,选择氛围、时间和元素,应用便能生成独一无二的梦境场景图,让那些转瞬即逝的梦境重现眼前,成为永恒的视觉记忆。

应用以靛蓝色为主色调,象征梦境的神秘与深邃。涵盖梦境创作、场景图库、收藏管理、关于信息四大模块。用户可以描述梦境、选择氛围、添加元素、调整色彩,快速生成个性化的梦境场景图。

1.2 核心功能

功能模块 功能描述 实现方式
梦境氛围 6种梦境氛围预设 枚举定义
时间背景 6种时间场景 渐变配色
梦境元素 12种场景元素 自定义绘制
色彩调色板 自定义色彩组合 颜色选择器
场景生成 AI风格场景绘制 CustomPainter
图库管理 场景保存与浏览 本地存储

1.3 梦境氛围定义

序号 氛围名称 Emoji 颜色 描述
1 宁静 🌙 蓝色 平静安详的梦境
2 神秘 🔮 紫色 充满未知的梦境
3 欢快 黄色 快乐愉悦的梦境
4 浪漫 💕 粉色 温馨浪漫的梦境
5 冒险 🌟 橙色 刺激冒险的梦境
6 超现实 🌀 青色 奇幻超现实的梦境

1.4 时间背景定义

序号 时间名称 Emoji 渐变色 视觉效果
1 黎明 🌅 粉橙渐变 晨曦微光
2 清晨 🌄 米黄渐变 清新明亮
3 正午 ☀️ 蓝白渐变 明亮通透
4 黄昏 🌇 红橙渐变 温暖柔和
5 夜晚 🌃 深蓝渐变 宁静深邃
6 深夜 🌙 深紫渐变 神秘幽暗

1.5 梦境元素定义

序号 元素名称 Emoji 描述
1 星辰 闪烁的星星效果
2 月亮 🌙 明亮的月亮光晕
3 云朵 ☁️ 飘动的云层
4 山峰 ⛰️ 远山轮廓
5 海洋 🌊 波浪起伏
6 森林 🌲 树木剪影
7 花朵 🌸 绽放的花朵
8 飞鸟 🕊️ 飞翔的鸟群
9 彩虹 🌈 七彩弧线
10 水晶 💎 透明晶体
11 蝴蝶 🦋 飞舞的蝴蝶
12 极光 🌌 绚丽极光

1.6 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
自定义绘制 CustomPainter -
动画控制 AnimationController -
目标平台 鸿蒙OS / Web API 21+

1.7 项目结构

lib/
└── main_dream_scene_recreator.dart
    ├── DreamSceneRecreatorApp    # 应用入口
    ├── DreamMood                 # 梦境氛围枚举
    ├── DreamElement              # 梦境元素枚举
    ├── DreamTime                 # 时间背景枚举
    ├── DreamScene                # 梦境场景模型
    ├── DreamPainter              # 场景绘制器
    ├── DreamSceneHomePage        # 主页面(底部导航)
    ├── _buildCreatePage          # 创作页面
    ├── _buildGalleryPage         # 图库页面
    ├── _buildFavoritesPage       # 收藏页面
    └── _buildProfilePage         # 关于页面

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
DreamSceneHomePage

创作页

图库页

收藏页

关于页

梦境描述

氛围选择

元素选择

预览区域

场景网格

场景详情

收藏列表

快速访问

应用信息

使用技巧

场景生成器
DreamPainter

元素渲染器
ElementRenderer

动画控制器
AnimationController

DreamScene
梦境场景

DreamMood
梦境氛围

DreamTime
时间背景

DreamElement
梦境元素

2.2 类图设计

has

has

contains

renders

DreamSceneRecreatorApp

+Widget build()

«enumeration»

DreamMood

+String label

+String emoji

+Color color

+String description

+peaceful()

+mysterious()

+joyful()

+romantic()

+adventurous()

+surreal()

«enumeration»

DreamTime

+String label

+String emoji

+List<Color> gradient

+dawn()

+morning()

+noon()

+dusk()

+night()

+midnight()

«enumeration»

DreamElement

+String label

+String emoji

+stars()

+moon()

+clouds()

+mountains()

+ocean()

+forest()

+flowers()

+birds()

+rainbows()

+crystals()

+butterflies()

+aurora()

DreamScene

+String id

+String title

+String description

+DreamMood mood

+DreamTime time

+List<DreamElement> elements

+List<Color> colorPalette

+DateTime createdAt

+int stars

+bool isFavorite

DreamPainter

+DreamMood mood

+DreamTime time

+List<DreamElement> elements

+List<Color> colorPalette

+double animationValue

+void paint()

+bool shouldRepaint()

2.3 页面导航流程

创作

图库

收藏

关于

应用启动

创作页

底部导航

输入梦境

场景列表

收藏列表

应用信息

选择氛围

选择时间

添加元素

调整色彩

生成场景

保存?

保存到图库

继续编辑

点击场景

查看详情

收藏?

添加收藏

返回列表

2.4 场景生成流程

图库 动画控制 绘制器 创作页 用户 图库 动画控制 绘制器 创作页 用户 输入梦境描述 选择氛围和时间 添加梦境元素 点击生成 传递参数 绘制背景 绘制元素 添加特效 返回场景 启动动画 实时更新 保存场景 显示保存成功

三、核心模块设计

3.1 数据模型设计

3.1.1 梦境氛围枚举 (DreamMood)
enum DreamMood {
  peaceful(label: '宁静', emoji: '🌙', color: Colors.blue, description: '平静安详的梦境'),
  mysterious(label: '神秘', emoji: '🔮', color: Colors.purple, description: '充满未知的梦境'),
  joyful(label: '欢快', emoji: '✨', color: Colors.yellow, description: '快乐愉悦的梦境'),
  romantic(label: '浪漫', emoji: '💕', color: Colors.pink, description: '温馨浪漫的梦境'),
  adventurous(label: '冒险', emoji: '🌟', color: Colors.orange, description: '刺激冒险的梦境'),
  surreal(label: '超现实', emoji: '🌀', color: Colors.cyan, description: '奇幻超现实的梦境');

  final String label;
  final String emoji;
  final Color color;
  final String description;
}
3.1.2 时间背景枚举 (DreamTime)
enum DreamTime {
  dawn(label: '黎明', emoji: '🌅', gradient: [Color(0xFFFFB6C1), Color(0xFFFFA07A)]),
  morning(label: '清晨', emoji: '🌄', gradient: [Color(0xFFFFE4B5), Color(0xFFFFDAB9)]),
  noon(label: '正午', emoji: '☀️', gradient: [Color(0xFF87CEEB), Color(0xFFFFFFFF)]),
  dusk(label: '黄昏', emoji: '🌇', gradient: [Color(0xFFFF6B6B), Color(0xFFFFA500)]),
  night(label: '夜晚', emoji: '🌃', gradient: [Color(0xFF191970), Color(0xFF000080)]),
  midnight(label: '深夜', emoji: '🌙', gradient: [Color(0xFF0D0D2B), Color(0xFF1A1A3E)]);

  final String label;
  final String emoji;
  final List<Color> gradient;
}
3.1.3 梦境场景模型 (DreamScene)
class DreamScene {
  final String id;              // 场景ID
  final String title;           // 场景标题
  final String description;     // 梦境描述
  final DreamMood mood;         // 梦境氛围
  final DreamTime time;         // 时间背景
  final List<DreamElement> elements; // 梦境元素
  final List<Color> colorPalette;    // 色彩调色板
  final DateTime createdAt;     // 创建时间
  final int stars;              // 星级评分
  bool isFavorite;              // 是否收藏
}
3.1.4 梦境氛围分布
30% 25% 18% 12% 10% 5% 梦境氛围使用分布示例 宁静 神秘 浪漫 欢快 冒险 超现实

3.2 页面结构设计

3.2.1 主页面布局

DreamSceneHomePage

IndexedStack

创作页

图库页

收藏页

关于页

NavigationBar

创作 Tab

图库 Tab

收藏 Tab

关于 Tab

3.2.2 创作页结构

创作页

SliverAppBar

场景预览

标题输入

描述输入

氛围选择

时间选择

元素选择

色彩选择

生成按钮

实时预览

动画效果

氛围卡片

时间滑块

元素芯片

颜色选择器

3.2.3 场景绘制结构

场景绘制

背景层

渐变叠加层

元素层

粒子层

光晕层

时间渐变

氛围色彩

星辰

月亮

云朵

山峰

海洋

森林

随机粒子

中心光晕

3.2.4 图库页结构

图库页

SliverAppBar

场景网格

场景卡片

场景预览

场景信息

氛围标签

动态绘制

缩略图

3.3 场景绘制逻辑

星辰

月亮

云朵

山峰

海洋

森林

获取氛围和时间

绘制背景渐变

叠加氛围色彩

有元素?

遍历元素列表

跳过

元素类型

绘制星星

绘制月亮

绘制云层

绘制山峰

绘制海浪

绘制树木

添加粒子效果

添加光晕效果

完成绘制


四、UI设计规范

4.1 配色方案

应用以靛蓝色为主色调,象征梦境的神秘与深邃:

颜色类型 色值 用途
主色 Indigo 导航、主题元素
辅助色 DeepPurple 创作页面
第三色 Blue 图库页面
强调色 Pink 收藏页面
背景色 #FAFAFA 页面背景
卡片背景 #FFFFFF 内容卡片

4.2 氛围色彩方案

氛围 主色调 辅助色 效果
宁静 蓝色 深蓝 平静安详
神秘 紫色 深紫 神秘莫测
欢快 黄色 橙色 活泼明快
浪漫 粉色 玫红 温馨浪漫
冒险 橙色 红色 热情奔放
超现实 青色 绿色 奇幻迷离

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
场景标题 16px Bold #000000
氛围标签 12px Regular 白色
描述文字 14px Regular 灰色
统计数字 20px Bold 白色

4.4 组件规范

4.4.1 氛围选择器
┌─────────────────────────────────────┐
│  梦境氛围                            │
│                                     │
│  [🌙 宁静] [🔮 神秘] [✨ 欢快]     │
│  [💕 浪漫] [🌟 冒险] [🌀 超现实]   │
└─────────────────────────────────────┘
4.4.2 时间选择器
┌─────────────────────────────────────┐
│  时间背景                            │
│                                     │
│  ┌────┐ ┌────┐ ┌────┐ ┌────┐      │
│  │🌅  │ │🌄  │ │☀️  │ │🌇  │      │
│  │黎明│ │清晨│ │正午│ │黄昏│      │
│  └────┘ └────┘ └────┘ └────┘      │
│  ┌────┐ ┌────┐                    │
│  │🌃  │ │🌙  │                    │
│  │夜晚│ │深夜│                    │
│  └────┘ └────┘                    │
└─────────────────────────────────────┘
4.4.3 元素选择器
┌─────────────────────────────────────┐
│  梦境元素                            │
│                                     │
│  [⭐ 星辰] [🌙 月亮] [☁️ 云朵]     │
│  [⛰️ 山峰] [🌊 海洋] [🌲 森林]     │
│  [🌸 花朵] [🕊️ 飞鸟] [🌈 彩虹]     │
│  [💎 水晶] [🦋 蝴蝶] [🌌 极光]     │
└─────────────────────────────────────┘
4.4.4 场景预览区域
┌─────────────────────────────────────┐
│  ┌─────────────────────────────┐   │
│  │                             │   │
│  │         🌙                  │   │
│  │      ⭐    ⭐               │   │
│  │                             │   │
│  │                             │   │
│  └─────────────────────────────┘   │
│                                     │
│         [✨ 生成梦境场景]           │
└─────────────────────────────────────┘
4.4.5 色彩调色板
┌─────────────────────────────────────┐
│  色彩调色板                          │
│                                     │
│  ⚫ 🔴 🟣 🔵 🔷 🟢 🟡 🟠           │
│                                     │
│  已选择:🔴 🔵 🟡                   │
└─────────────────────────────────────┘

五、核心功能实现

5.1 场景绘制实现

class DreamPainter extends CustomPainter {
  final DreamMood mood;
  final DreamTime time;
  final List<DreamElement> elements;
  final List<Color> colorPalette;
  final double animationValue;

  
  void paint(Canvas canvas, Size size) {
    _drawBackground(canvas, size);
    _drawGradientOverlay(canvas, size);
    _drawElements(canvas, size);
    _drawParticles(canvas, size);
    _drawGlowEffect(canvas, size);
  }

  void _drawBackground(Canvas canvas, Size size) {
    final gradient = LinearGradient(
      begin: Alignment.topLeft,
      end: Alignment.bottomRight,
      colors: time.gradient,
    );

    final paint = Paint()
      ..shader = gradient.createShader(Rect.fromLTWH(0, 0, size.width, size.height));

    canvas.drawRect(Rect.fromLTWH(0, 0, size.width, size.height), paint);
  }
}

5.2 星辰绘制实现

void _drawStars(Canvas canvas, Size size) {
  final paint = Paint()..color = Colors.white.withValues(alpha: 0.8);

  for (int i = 0; i < 50; i++) {
    final x = random.nextDouble() * size.width;
    final y = random.nextDouble() * size.height * 0.6;
    final radius = random.nextDouble() * 2 + 1;
    final twinkle = sin(animationValue * 2 * pi + i) * 0.5 + 0.5;

    paint.color = Colors.white.withValues(alpha: 0.5 + twinkle * 0.5);
    canvas.drawCircle(Offset(x, y), radius, paint);
  }
}

5.3 月亮绘制实现

void _drawMoon(Canvas canvas, Size size) {
  final center = Offset(size.width * 0.8, size.height * 0.15);
  final radius = size.width * 0.08;

  final paint = Paint()
    ..shader = RadialGradient(
      colors: [
        Colors.yellow.withValues(alpha: 0.9),
        Colors.orange.withValues(alpha: 0.7),
      ],
    ).createShader(Rect.fromCircle(center: center, radius: radius));

  canvas.drawCircle(center, radius, paint);

  final glowPaint = Paint()
    ..shader = RadialGradient(
      colors: [
        Colors.yellow.withValues(alpha: 0.3),
        Colors.yellow.withValues(alpha: 0.0),
      ],
    ).createShader(Rect.fromCircle(center: center, radius: radius * 2));

  canvas.drawCircle(center, radius * 2, glowPaint);
}

5.4 海洋绘制实现

void _drawOcean(Canvas canvas, Size size) {
  final paint = Paint()
    ..shader = LinearGradient(
      begin: Alignment.topCenter,
      end: Alignment.bottomCenter,
      colors: [
        Colors.blue.withValues(alpha: 0.3),
        Colors.blue.withValues(alpha: 0.6),
      ],
    ).createShader(Rect.fromLTWH(0, size.height * 0.6, size.width, size.height * 0.4));

  for (int i = 0; i < 5; i++) {
    final path = Path();
    final baseY = size.height * 0.65 + i * 20.0;

    path.moveTo(0, baseY);
    for (double x = 0; x <= size.width; x += 10) {
      final y = baseY + sin((x + animationValue * 100) * 0.02) * 10;
      path.lineTo(x, y);
    }
    path.lineTo(size.width, size.height);
    path.lineTo(0, size.height);
    path.close();

    canvas.drawPath(path, paint..color = Colors.blue.withValues(alpha: 0.2 + i * 0.05));
  }
}

5.5 场景生成实现

void _generateDreamScene() {
  if (_titleController.text.isEmpty || _descriptionController.text.isEmpty) {
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text('请输入梦境标题和描述')),
    );
    return;
  }

  setState(() {
    _isGenerating = true;
  });

  Future.delayed(const Duration(seconds: 2), () {
    final scene = DreamScene(
      id: 'dream_${DateTime.now().millisecondsSinceEpoch}',
      title: _titleController.text,
      description: _descriptionController.text,
      mood: _selectedMood,
      time: _selectedTime,
      elements: _selectedElements.toList(),
      colorPalette: _colorPalette.isEmpty
          ? [_selectedMood.color, _selectedTime.gradient[0]]
          : _colorPalette,
    );

    setState(() {
      _dreamScenes.insert(0, scene);
      _isGenerating = false;
    });
  });
}

六、交互设计

6.1 创作流程

绘制器 预览区 创作页 用户 绘制器 预览区 创作页 用户 输入梦境描述 实时更新预览 显示预览效果 选择氛围 更新氛围色彩 显示新效果 添加元素 添加新元素 显示元素效果 点击生成 执行生成 显示完成

6.2 图库浏览流程

点击场景

删除场景

打开图库

显示场景列表

用户操作

查看详情

查看大图

收藏?

添加收藏

返回列表

确认删除

从列表移除

6.3 收藏管理流程

点击收藏按钮

再次点击

查看收藏

点击场景

场景详情

收藏

取消收藏

收藏列表


七、扩展功能规划

7.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 2024-03-31 基础UI框架 氛围时间选择 元素绘制实现 AI图像生成 更多元素类型 场景导出 梦境日记 社交分享 云端同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 梦境场景重现应用开发计划

7.2 功能扩展建议

7.2.1 AI图像生成

生成功能:

  • 集成AI图像生成API
  • 文本到图像转换
  • 风格迁移
  • 高分辨率输出
7.2.2 梦境日记

日记功能:

  • 梦境记录
  • 时间线展示
  • 情绪分析
  • 梦境统计
7.2.3 社交分享

分享功能:

  • 一键分享到社交平台
  • 梦境社区
  • 评论互动
  • 灵感收集

八、注意事项

8.1 开发注意事项

  1. 性能优化:场景绘制需优化渲染性能

  2. 动画流畅:动画控制器需正确管理生命周期

  3. 内存管理:大量场景需注意内存释放

  4. 自定义绘制:CustomPainter需正确实现shouldRepaint

  5. 状态管理:参数调整需及时更新预览

8.2 常见问题

问题 原因 解决方案
绘制卡顿 重绘范围大 局部重绘优化
动画不流畅 帧率过低 优化绘制算法
元素重叠 层级问题 调整绘制顺序
颜色偏差 色彩空间 统一色彩空间

8.3 使用技巧

🌙 梦境创作技巧 🌙

氛围选择建议

  • 宁静氛围:适合平静的梦境,如漫步森林
  • 神秘氛围:适合奇幻的梦境,如探索未知
  • 欢快氛围:适合快乐的梦境,如童年回忆
  • 浪漫氛围:适合温馨的梦境,如相遇场景

元素搭配建议

  • 星辰 + 月亮 + 云朵 = 宁静夜空
  • 山峰 + 森林 + 花朵 = 自然风光
  • 海洋 + 极光 + 星辰 = 奇幻世界
  • 蝴蝶 + 花朵 + 彩虹 = 童话场景

色彩调整技巧

  • 冷色调营造神秘感
  • 暖色调营造温馨感
  • 对比色增加视觉冲击
  • 相近色营造和谐感

九、运行说明

9.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+
Web浏览器 Chrome 90+

9.2 运行命令

# 查看可用设备
flutter devices

# 运行到Web服务器
flutter run -d web-server -t lib/main_dream_scene_recreator.dart --web-port 8139

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

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

十、总结

梦境场景重现应用通过梦境创作、场景图库、收藏管理、关于信息四大模块,为用户提供了一个便捷的梦境可视化平台。应用支持6种梦境氛围、6种时间背景、12种梦境元素,让用户轻松将抽象的梦境转化为具体的视觉场景。

核心功能涵盖氛围选择、时间设置、元素添加、色彩调整四大模块。梦境氛围从宁静到超现实,覆盖多种情感基调;时间背景从黎明到深夜,展现不同时段的光影变化;梦境元素包含星辰、月亮、云朵等12种选择;色彩调色板支持自定义配色方案。

应用采用 Material Design 3 设计规范,以靛蓝色为主色调,象征梦境的神秘与深邃。通过本应用,希望能够帮助用户将转瞬即逝的梦境转化为永恒的视觉记忆,开启梦境创作之旅。

梦境场景重现——让梦境照进现实


Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐