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 整体架构图

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)
dart 复制代码
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)
dart 复制代码
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)
dart 复制代码
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 场景绘制实现

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

  @override
  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 星辰绘制实现

dart 复制代码
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 月亮绘制实现

dart 复制代码
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 海洋绘制实现

dart 复制代码
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 场景生成实现

dart 复制代码
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 运行命令

bash 复制代码
# 查看可用设备
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 设计规范,以靛蓝色为主色调,象征梦境的神秘与深邃。通过本应用,希望能够帮助用户将转瞬即逝的梦境转化为永恒的视觉记忆,开启梦境创作之旅。

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


相关推荐
李李李勃谦2 小时前
Flutter 框架跨平台鸿蒙开发 - 儿童故事库
flutter·华为·harmonyos
空中海2 小时前
1.3 Dart 核心语言特性
flutter·dart
若苗瞬2 小时前
声音克隆开源项目VoxCPM
开源·多语言·语音克隆·方言·voxcpm
提子拌饭1332 小时前
浅灰计算器:鸿蒙的Flutter框架 实现的简洁计算器应用
flutter·华为·harmonyos·鸿蒙
枫叶丹42 小时前
【HarmonyOS 6.0】屏幕管理新特性:多屏坐标转换详解
开发语言·华为·harmonyos
提子拌饭1332 小时前
开源鸿蒙跨平台Flutter开发:AR厨艺教学应用
android·flutter·华为·开源·ar·harmonyos·鸿蒙
想你依然心痛2 小时前
HarmonyOS 5.0企业级开发实战:构建元服务驱动的智能协同办公套件
华为·harmonyos
2401_839633912 小时前
Flutter 框架跨平台鸿蒙开发 - 家庭食谱传承系统
flutter·华为·harmonyos
世人万千丶2 小时前
开源鸿蒙跨平台Flutter开发:步数统计应用
学习·flutter·华为·开源·harmonyos·鸿蒙