Flutter 框架跨平台鸿蒙开发 - 梦境场景重现应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图





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 整体架构图
2.2 类图设计
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 梦境氛围分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 创作页结构
3.2.3 场景绘制结构
3.2.4 图库页结构
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 后续版本规划
7.2 功能扩展建议
7.2.1 AI图像生成
生成功能:
- 集成AI图像生成API
- 文本到图像转换
- 风格迁移
- 高分辨率输出
7.2.2 梦境日记
日记功能:
- 梦境记录
- 时间线展示
- 情绪分析
- 梦境统计
7.2.3 社交分享
分享功能:
- 一键分享到社交平台
- 梦境社区
- 评论互动
- 灵感收集
八、注意事项
8.1 开发注意事项
-
性能优化:场景绘制需优化渲染性能
-
动画流畅:动画控制器需正确管理生命周期
-
内存管理:大量场景需注意内存释放
-
自定义绘制:CustomPainter需正确实现shouldRepaint
-
状态管理:参数调整需及时更新预览
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 设计规范,以靛蓝色为主色调,象征梦境的神秘与深邃。通过本应用,希望能够帮助用户将转瞬即逝的梦境转化为永恒的视觉记忆,开启梦境创作之旅。
梦境场景重现——让梦境照进现实
更多推荐



所有评论(0)