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

一、项目概述

运行效果图

image-20260409222335786

image-20260409222345977

image-20260409222349668

image-20260409222355792

1.1 应用简介

气味图书馆是一款创意体验应用,收集各种气味(比如雨后的泥土、妈妈做的菜、旧书的味道),用手机"闻"到这些气味,唤起美好回忆。应用涵盖自然气息、美食记忆、时光印记等多种气味分类,让用户在虚拟的气味世界中重温美好时光。

应用以浪漫的粉色为主色调,象征美好与温馨的记忆。涵盖气味浏览、收藏集管理、最爱收藏、关于信息四大模块。用户可以浏览气味、闻嗅体验、收藏整理、创建合集,沉浸式感受气味带来的情感共鸣。

1.2 核心功能

功能模块 功能描述 实现方式
气味浏览 分类浏览各种气味 列表展示
闻嗅体验 模拟闻嗅气味过程 进度动画
收藏管理 创建管理收藏集 弹窗表单
最爱收藏 收藏喜欢的气味 列表存储
气味详情 查看气味详细信息 卡片展示
记忆故事 气味背后的故事 文字描述

1.3 气味分类定义

序号 分类名称 Emoji 描述
1 自然气息 🌿 来自大自然的芬芳
2 美食记忆 🍳 舌尖上的美好回忆
3 时光印记 📚 岁月沉淀的味道
4 四季流转 🌸 春夏秋冬的气息
5 情感味道 💝 爱与温暖的气息
6 旅途芬芳 ✈️ 行走中的气味记忆

1.4 气味浓度定义

序号 浓度名称 Emoji 数值 描述
1 淡雅 🍃 0.3 清新淡雅
2 适中 🌺 0.6 浓度适中
3 浓郁 🌹 0.9 香气浓郁
4 浓烈 🔥 1.0 气味浓烈

1.5 情绪类型定义

序号 情绪名称 Emoji 颜色 描述
1 愉悦 😊 #FFEB3B 开心快乐
2 平静 😌 #81C784 宁静安详
3 怀念 🥺 #B39DDB 怀旧感伤
4 浪漫 🥰 #F48FB1 甜蜜浪漫
5 活力 🤩 #FF7043 充满活力
6 温馨 🥰 #FFB74D 温暖舒适

1.6 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
动画效果 AnimationController -
状态管理 StatefulWidget -
目标平台 鸿蒙OS / Web API 21+

1.7 项目结构

lib/
└── main_scent_library.dart
    ├── ScentLibraryApp               # 应用入口
    ├── ScentCategory                 # 气味分类枚举
    ├── ScentIntensity                # 气味浓度枚举
    ├── MoodType                      # 情绪类型枚举
    ├── Scent                         # 气味模型
    ├── ScentCollection               # 收藏集模型
    ├── ScentLibraryHomePage          # 主页面(底部导航)
    ├── _buildLibraryPage             # 气味页面
    ├── _buildCollectionsPage         # 收藏集页面
    ├── _buildFavoritesPage           # 最爱页面
    └── _buildProfilePage             # 关于页面

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
ScentLibraryHomePage

气味页

收藏集页

最爱页

关于页

分类浏览

气味详情

闻嗅体验

收藏操作

收藏集列表

创建收藏集

最爱列表

快速体验

功能说明

使用技巧

气味处理器
ScentProcessor

收藏管理器
CollectionManager

体验控制器
ExperienceController

Scent
气味模型

ScentCollection
收藏集

ScentCategory
气味分类

MoodType
情绪类型

2.2 类图设计

has

has

contains

contains

ScentLibraryApp

+Widget build()

«enumeration»

ScentCategory

+String label

+String emoji

+String description

+nature()

+food()

+memory()

+season()

+emotion()

+travel()

«enumeration»

ScentIntensity

+String label

+String emoji

+double value

+light()

+moderate()

+strong()

+intense()

«enumeration»

MoodType

+String label

+String emoji

+Color color

+happy()

+calm()

+nostalgic()

+romantic()

+energetic()

+cozy()

Scent

+String id

+String name

+ScentCategory category

+ScentIntensity intensity

+String description

+List<String> notes

+List<MoodType> moods

+String memory

+DateTime createdAt

+int collectCount

+double rating

ScentCollection

+String id

+String name

+List<Scent> scents

+DateTime createdAt

+String description

2.3 页面导航流程

气味

收藏集

最爱

关于

应用启动

气味页

底部导航

浏览气味

收藏集管理

最爱列表

应用信息

选择气味

查看详情

闻嗅体验

收藏?

添加到最爱

继续浏览

创建收藏集

添加气味

2.4 闻嗅体验流程

进度动画 体验控制器 气味页 用户 进度动画 体验控制器 气味页 用户 选择气味 显示详情卡片 点击闻一闻 启动体验 开始动画 显示进度环 模拟闻嗅 完成体验 显示完成提示

三、核心模块设计

3.1 数据模型设计

3.1.1 气味分类枚举 (ScentCategory)
enum ScentCategory {
  nature(label: '自然气息', emoji: '🌿', description: '来自大自然的芬芳'),
  food(label: '美食记忆', emoji: '🍳', description: '舌尖上的美好回忆'),
  memory(label: '时光印记', emoji: '📚', description: '岁月沉淀的味道'),
  season(label: '四季流转', emoji: '🌸', description: '春夏秋冬的气息'),
  emotion(label: '情感味道', emoji: '💝', description: '爱与温暖的气息'),
  travel(label: '旅途芬芳', emoji: '✈️', description: '行走中的气味记忆');

  final String label;
  final String emoji;
  final String description;
}
3.1.2 气味浓度枚举 (ScentIntensity)
enum ScentIntensity {
  light(label: '淡雅', emoji: '🍃', value: 0.3),
  moderate(label: '适中', emoji: '🌺', value: 0.6),
  strong(label: '浓郁', emoji: '🌹', value: 0.9),
  intense(label: '浓烈', emoji: '🔥', value: 1.0);

  final String label;
  final String emoji;
  final double value;
}
3.1.3 气味模型 (Scent)
class Scent {
  final String id;                    // 气味ID
  final String name;                  // 气味名称
  final ScentCategory category;       // 气味分类
  final ScentIntensity intensity;     // 气味浓度
  final String description;           // 气味描述
  final List<String> notes;           // 香调笔记
  final List<MoodType> moods;         // 关联情绪
  final String memory;                // 记忆故事
  final DateTime createdAt;           // 创建时间
  final int collectCount;             // 收藏数
  final double rating;                // 评分
  final String? imageUrl;             // 图片地址
}
3.1.4 收藏集模型 (ScentCollection)
class ScentCollection {
  final String id;                    // 收藏集ID
  final String name;                  // 收藏集名称
  final List<Scent> scents;           // 气味列表
  final DateTime createdAt;           // 创建时间
  final String description;           // 描述
}
3.1.5 气味分类分布
25% 20% 18% 15% 12% 10% 气味分类分布示例 自然气息 美食记忆 时光印记 四季流转 情感味道 旅途芬芳

3.2 页面结构设计

3.2.1 主页面布局

ScentLibraryHomePage

IndexedStack

气味页

收藏集页

最爱页

关于页

NavigationBar

气味 Tab

收藏集 Tab

最爱 Tab

关于 Tab

3.2.2 气味页结构

气味页

SliverAppBar

快速统计

当前气味

分类网格

热门列表

气味总数

收藏集数

最爱上

气味信息

闻嗅按钮

记忆故事

6个分类

数量统计

3.2.3 气味详情卡片结构

气味详情卡片

头部区域

描述区域

香调标签

闻嗅区域

记忆故事

分类图标

气味名称

浓度标签

评分星级

进度环

闻嗅按钮

3.2.4 收藏集页结构

收藏集页

SliverAppBar

创建按钮

收藏集列表

收藏集卡片

气味数量

收藏集名称

描述信息

气味预览

3.3 闻嗅体验逻辑

选择气味

显示详情卡片

点击闻一闻按钮

启动体验动画

进度环开始旋转

更新进度0-100%

进度完成?

停止动画

显示完成提示

收藏?

添加到最爱

返回浏览

3.4 收藏管理逻辑

点击创建

显示创建对话框

输入收藏集名称

输入描述

确认创建?

生成收藏集对象

添加到列表

显示成功提示

取消创建


四、UI设计规范

4.1 配色方案

应用以浪漫的粉色为主色调,象征美好与温馨的记忆:

颜色类型 色值 用途
主色 #E91E63 (Pink) 导航、主题元素
辅助色 #F06292 收藏集页面
第三色 #F48FB1 最爱页面
强调色 #F8BBD9 关于页面
背景色 #FAFAFA 页面背景
卡片背景 #FFFFFF 气味卡片

4.2 情绪颜色定义

情绪 色值 视觉效果
愉悦 #FFEB3B 黄色明亮
平静 #81C784 绿色宁静
怀念 #B39DDB 紫色温柔
浪漫 #F48FB1 粉色甜蜜
活力 #FF7043 橙色活力
温馨 #FFB74D 橙黄温暖

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
气味名称 16px Bold #000000
描述文字 13px Regular 灰色
香调标签 11px Regular 黑色
统计数字 20px Bold 白色

4.4 组件规范

4.4.1 气味卡片
┌─────────────────────────────────────┐
│  🌿 雨后泥土              [🌺 适中]  │
│     雨后大地的芬芳,湿润的泥土气息  │
│                           ⭐4.8    │
│                           256人收藏 │
└─────────────────────────────────────┘
4.4.2 气味详情卡片
┌─────────────────────────────────────┐
│  ┌────────┐  雨后泥土               │
│  │   🌿   │  🌿 自然气息 · 🌺 适中  │
│  └────────┘  ⭐⭐⭐⭐⭐ 4.8         │
│                                     │
│  雨后大地的芬芳,湿润的泥土气息,  │
│  带着青草的清香                    │
│                                     │
│  [湿润泥土] [青草香] [清新空气]    │
│                                     │
│         ╭──────────────╮            │
│        ╱   进度环 80%   ╲           │
│       │    ┌──────┐     │          │
│       │    │ 👃   │     │          │
│       │    │闻一闻│     │          │
│       │    └──────┘     │          │
│        ╲              ╱             │
│         ╰──────────────╯            │
│                                     │
│  📖 小时候在乡下,每逢下雨后...    │
└─────────────────────────────────────┘
4.4.3 分类网格
┌─────────────────────────────────────┐
│  🌿        🍳        📚            │
│  自然气息   美食记忆   时光印记     │
│  2种       2种       1种           │
│                                     │
│  🌸        💝        ✈️            │
│  四季流转   情感味道   旅途芬芳     │
│  2种       1种       1种           │
└─────────────────────────────────────┘
4.4.4 收藏集卡片
┌─────────────────────────────────────┐
│  ┌────────┐  童年记忆               │
│  │   3    │  那些年最珍贵的味道     │
│  └────────┘                         │
│                                     │
│  [🌿 雨后泥土] [🍳 妈妈的红烧肉]   │
│  [📚 旧书墨香]                      │
└─────────────────────────────────────┘

五、核心功能实现

5.1 气味选择实现

void _selectScent(Scent scent) {
  setState(() {
    _currentScent = scent;
    _isSmelling = false;
    _smellProgress = 0.0;
  });
}

5.2 闻嗅体验实现

void _startSmelling() {
  if (_currentScent == null) return;

  setState(() {
    _isSmelling = true;
    _smellProgress = 0.0;
  });

  _smellController.reset();
  _smellController.forward();

  Timer.periodic(const Duration(milliseconds: 50), (timer) {
    setState(() {
      _smellProgress += 0.02;

      if (_smellProgress >= 1.0) {
        _smellProgress = 1.0;
        _isSmelling = false;
        timer.cancel();
        _showSmellComplete();
      }
    });
  });
}

5.3 收藏功能实现

void _addToFavorite(Scent scent) {
  if (!_favoriteScents.any((s) => s.id == scent.id)) {
    setState(() {
      _favoriteScents.add(scent);
    });
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text('已添加到收藏')),
    );
  }
}

5.4 创建收藏集实现

void _createCollection(String name, String description) {
  final collection = ScentCollection(
    id: 'col_${DateTime.now().millisecondsSinceEpoch}',
    name: name,
    scents: [],
    description: description,
  );

  setState(() {
    _collections.insert(0, collection);
  });
}

5.5 分类统计实现

Widget _buildCategoryGrid() {
  return GridView.builder(
    shrinkWrap: true,
    physics: const NeverScrollableScrollPhysics(),
    gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
      crossAxisCount: 3,
      crossAxisSpacing: 12,
      mainAxisSpacing: 12,
      childAspectRatio: 1.2,
    ),
    itemCount: ScentCategory.values.length,
    itemBuilder: (context, index) {
      final category = ScentCategory.values[index];
      final count = _scents.where((s) => s.category == category).length;
      return CategoryCard(category: category, count: count);
    },
  );
}

六、交互设计

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框架 气味数据模型 闻嗅体验功能 真实气味设备 社区分享功能 气味推荐算法 AR气味体验 气味日记功能 智能气味配对 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 气味图书馆应用开发计划

7.2 功能扩展建议

7.2.1 真实气味设备

设备功能:

  • 蓝牙气味设备连接
  • 气味胶囊管理
  • 气味强度控制
  • 设备状态监控
7.2.2 社区分享

分享功能:

  • 气味故事分享
  • 评论互动
  • 收藏集公开
  • 气味推荐
7.2.3 智能推荐

推荐功能:

  • 基于情绪推荐
  • 基于场景推荐
  • 基于季节推荐
  • 个性化推荐

八、注意事项

8.1 开发注意事项

  1. 情感体验:气味描述需注重情感共鸣

  2. 动画流畅:闻嗅动画需流畅自然

  3. 状态管理:收藏状态需正确同步

  4. 定时器管理:Timer需在组件销毁时取消

  5. 用户体验:提供清晰的视觉反馈

8.2 常见问题

问题 原因 解决方案
动画卡顿 刷新频率高 优化动画帧率
收藏不显示 列表未更新 检查setState
进度不更新 Timer未启动 检查定时器
气味不切换 状态未重置 检查状态管理
收藏集为空 数据未加载 检查数据初始化

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_scent_library.dart --web-port 8144

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

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

十、总结

气味图书馆应用通过气味浏览、收藏集管理、最爱收藏、关于信息四大模块,为用户提供了一个独特的气味记忆体验平台。应用支持6种气味分类、4种浓度等级、6种情绪类型,让用户在虚拟的气味世界中重温美好时光。

核心功能涵盖气味浏览、闻嗅体验、收藏管理、记忆故事四大模块。气味分类从自然气息到旅途芬芳,覆盖生活的方方面面;浓度等级从淡雅到浓烈,满足不同偏好;情绪类型从愉悦到温馨,唤起各种情感共鸣。

应用采用 Material Design 3 设计规范,以浪漫的粉色为主色调,象征美好与温馨的记忆。通过本应用,希望能够帮助用户记录和重温气味带来的美好回忆,在气味的世界中找到情感的寄托。

气味图书馆——用气味唤起美好回忆


Logo

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

更多推荐