冥想指导应用


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

一、项目概述

运行效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1 应用简介

冥想指导应用是一款帮助用户进行正念冥想练习的身心健康工具。在快节奏的现代生活中,压力、焦虑、失眠等问题日益普遍,冥想作为一种古老的身心修炼方法,已被现代科学证实对身心健康有诸多益处。本应用整合了多种冥想类型,包括呼吸冥想、放松冥想、专注冥想、睡眠冥想等,配合引导式练习和呼吸训练,帮助用户建立持续的冥想习惯。

冥想的核心在于觉察与接纳。通过规律的冥想练习,可以培养对当下的觉知,减少对过去的执着和对未来的焦虑,从而获得内心的平静与力量。本应用通过清晰的引导语、舒缓的视觉设计和科学的练习时长,让冥想变得简单易行。

1.2 核心功能

功能模块 功能描述 实现方式
冥想课程 多种类型冥想课程 数据模型 + 详情页
呼吸练习 引导式呼吸训练 AnimationController + Timer
冥想播放 计时与引导播放 Timer + 进度指示
收藏功能 收藏喜欢的冥想 Set集合 + 状态管理
历史记录 记录冥想历史 List集合 + 时间戳
统计数据 冥想时长与连续天数 计算属性 + 数据聚合

1.3 冥想分类

分类 英文标识 图标 颜色 功效
呼吸冥想 breathing air 青色 平静内心、调节情绪
放松冥想 relaxation spa 绿色 释放紧张、深度放松
专注冥想 focus center_focus_strong 靛蓝色 提升专注、清晰思维
睡眠冥想 sleep nightlight_round 深紫色 改善睡眠、缓解失眠
减压冥想 stress self_improvement 橙色 缓解压力、减轻焦虑
晨间冥想 morning wb_sunny 琥珀色 开启活力、设定意图
感恩冥想 gratitude favorite 粉色 培养感恩、提升幸福
身体扫描 bodyScan accessibility_new 蓝绿色 觉察身体、释放紧张

1.4 技术栈

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

1.5 项目结构

lib/
└── main_meditation_guide.dart
    ├── MeditationGuideApp        # 应用入口
    ├── MeditationCategory        # 冥想分类枚举
    ├── BreathingPhase            # 呼吸阶段枚举
    ├── MeditationSession         # 冥想课程模型
    ├── HomePage                  # 主页面
    │   ├── _buildHomePage()      # 首页
    │   ├── _buildMeditationPage() # 冥想列表页
    │   ├── _buildBreathingPage() # 呼吸练习页
    │   └── _buildProfilePage()   # 个人中心
    └── MeditationPlayerPage      # 冥想播放页面

二、系统架构

2.1 整体架构图

Business Logic

Presentation Layer

Data Layer

MeditationSession
冥想课程模型

MeditationCategory
分类枚举

BreathingPhase
呼吸阶段枚举

首页
今日冥想

冥想列表页

呼吸练习页

个人中心

冥想播放页

呼吸动画
_breathingController

冥想计时
_timer

收藏管理
_favorites

历史记录
_history

2.2 类图设计

manages

navigates

has

plays

contains

MeditationGuideApp

+Widget build()

HomePage

-int _currentIndex

-List<MeditationSession> _sessions

-Set<String> _favorites

-List<Map> _history

-int _totalMinutes

-int _streakDays

-AnimationController _breathingController

-BreathingPhase _currentPhase

-bool _isBreathing

+Widget build()

-void _startBreathingExercise()

-void _stopBreathingExercise()

-void _startMeditation()

MeditationSession

+String id

+String title

+String description

+MeditationCategory category

+int durationMinutes

+List<String> instructions

+int difficulty

+int plays

+double rating

MeditationPlayerPage

-AnimationController _controller

-int _currentStep

-int _remainingSeconds

-Timer _timer

-bool _isPlaying

-bool _isCompleted

+Widget build()

-void _startMeditation()

-void _completeMeditation()

«enumeration»

MeditationCategory

breathing

relaxation

focus

sleep

stress

morning

gratitude

bodyScan

+String categoryName

+IconData categoryIcon

+Color categoryColor

+String categoryDescription

«enumeration»

BreathingPhase

inhale

holdIn

exhale

holdOut

+String phaseName

+String phaseInstruction

2.3 数据流程图

选择课程

开始冥想

呼吸练习

收藏

用户操作

操作类型

加载课程详情

进入播放页面

启动呼吸动画

更新收藏状态

显示引导语

开始计时

动画循环

更新UI

完成记录

更新统计

2.4 呼吸练习流程

点击开始

4秒后

4秒后

6秒后

2秒后

循环8次

用户停止

用户停止

用户停止

用户停止

等待开始

吸气

屏息

呼气

等待

完成

停止


三、核心模块设计

3.1 数据模型设计

3.1.1 冥想课程模型 (MeditationSession)
class MeditationSession {
  final String id;                    // 唯一标识
  final String title;                 // 课程标题
  final String description;           // 课程描述
  final MeditationCategory category;  // 冥想分类
  final int durationMinutes;          // 时长(分钟)
  final List<String> instructions;    // 引导语列表
  final int difficulty;               // 难度等级(1-3)
  final int plays;                    // 播放次数
  final double rating;                // 评分
}
3.1.2 冥想分类枚举 (MeditationCategory)
18% 15% 15% 12% 12% 10% 10% 8% 冥想课程分布 呼吸冥想 放松冥想 专注冥想 睡眠冥想 减压冥想 晨间冥想 感恩冥想 身体扫描
分类 英文标识 图标 颜色 推荐时长
呼吸冥想 breathing air 青色 5-10分钟
放松冥想 relaxation spa 绿色 15-20分钟
专注冥想 focus center_focus_strong 靛蓝色 10-15分钟
睡眠冥想 sleep nightlight_round 深紫色 20-30分钟
减压冥想 stress self_improvement 橙色 10-15分钟
晨间冥想 morning wb_sunny 琥珀色 5-10分钟
感恩冥想 gratitude favorite 粉色 5-10分钟
身体扫描 bodyScan accessibility_new 蓝绿色 15-20分钟
3.1.3 呼吸阶段枚举 (BreathingPhase)
阶段 英文标识 时长 说明
吸气 inhale 4秒 慢慢吸气
屏息 holdIn 4秒 保持屏息
呼气 exhale 6秒 慢慢呼气
等待 holdOut 2秒 放松等待

3.2 页面结构设计

3.2.1 首页模块

首页 _buildHomePage

今日冥想卡片

冥想分类横向滚动

推荐冥想列表

统计信息

总时长/连续天数/冥想次数

8个分类卡片

课程卡片

收藏按钮

3.2.2 呼吸练习页面

呼吸练习页

呼吸动画圆

当前阶段文字

控制按钮

呼吸模式说明

缩放动画

渐变光晕

吸气/屏息/呼气/等待

循环计数

4-4-6-2模式

3.2.3 冥想播放页面

点击开始

点击暂停

点击继续

时间结束

显示完成界面

准备开始

播放中

暂停

完成

3.3 状态管理

3.3.1 核心状态变量
class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
  // 导航状态
  int _currentIndex = 0;
  
  // 数据状态
  final List<MeditationSession> _sessions = [];
  final Set<String> _favorites = {};
  final List<Map<String, dynamic>> _history = [];
  
  // 统计状态
  int _totalMinutes = 0;
  int _streakDays = 0;
  
  // 呼吸练习状态
  late AnimationController _breathingController;
  late Animation<double> _breathingAnimation;
  BreathingPhase _currentPhase = BreathingPhase.inhale;
  bool _isBreathing = false;
  int _breathingCycle = 0;
  Timer? _breathingTimer;
  
  // 呼吸模式配置
  final Map<String, int> _breathingPattern = {
    'inhale': 4,
    'holdIn': 4,
    'exhale': 6,
    'holdOut': 2,
  };
}
3.3.2 呼吸动画逻辑
void _runBreathingPhase() {
  if (!_isBreathing) return;

  int duration;
  switch (_currentPhase) {
    case BreathingPhase.inhale:
      duration = _breathingPattern['inhale']!;
      _breathingController.forward();  // 放大
      break;
    case BreathingPhase.exhale:
      duration = _breathingPattern['exhale']!;
      _breathingController.reverse();  // 缩小
      break;
    // ...
  }

  _breathingTimer = Timer(Duration(seconds: duration), () {
    // 切换到下一阶段
    setState(() {
      _currentPhase = _nextPhase;
      if (_currentPhase == BreathingPhase.inhale) {
        _breathingCycle++;
        if (_breathingCycle >= 8) {
          _stopBreathingExercise();
          return;
        }
      }
    });
    _runBreathingPhase();
  });
}

四、UI设计规范

4.1 配色方案

应用采用深色主题设计,营造宁静祥和的氛围:

颜色类型 色值 用途
主色 #9C27B0 (Purple) AppBar、按钮、强调元素
背景色 #1A1A2E 页面背景
卡片背景 #16213E 卡片、弹窗
文字主色 #FFFFFF 主要文字
文字次色 #B0BEC5 次要文字

分类专属颜色:

// 呼吸冥想 - 青色
Colors.cyan

// 放松冥想 - 绿色
Colors.green

// 专注冥想 - 靛蓝色
Colors.indigo

// 睡眠冥想 - 深紫色
Colors.deepPurple

// 减压冥想 - 橙色
Colors.orange

// 晨间冥想 - 琥珀色
Colors.amber

// 感恩冥想 - 粉色
Colors.pink

// 身体扫描 - 蓝绿色
Colors.teal

4.2 字体规范

元素 字号 字重 颜色
课程标题 22px Bold #FFFFFF
列表标题 16px Medium #FFFFFF
引导文字 15px Regular #B0BEC5
时间显示 32px Bold #FFFFFF
阶段文字 20px Bold #FFFFFF

4.3 组件规范

4.3.1 冥想课程卡片
┌─────────────────────────────────────────────────┐
│ ┌────┐  晨间觉醒                        [❤️]   │
│ │ 🌅 │  晨间冥想 · 10分钟 · ⭐4.8              │
│ └────┘                                          │
└─────────────────────────────────────────────────┘
4.3.2 呼吸动画圆
        ┌─────────────────┐
       ╱                   ╲
      │                     │
     │    ┌───────────┐    │
     │    │   吸气    │    │
     │    │  第2循环  │    │
     │    └───────────┘    │
      │                     │
       ╲                   ╱
        └─────────────────┘
4.3.3 冥想播放界面
┌─────────────────────────────────────────────────┐
│                                                 │
│              晨间觉醒                           │
│                                                 │
│           ┌───────────────┐                    │
│           │               │                    │
│           │    08:30      │                    │
│           │               │                    │
│           └───────────────┘                    │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ ① 找一个安静的地方坐下,保持背部挺直    │   │
│  │ ████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│              [ ▶️ 开始冥想 ]                    │
│                                                 │
└─────────────────────────────────────────────────┘

五、核心功能实现

5.1 呼吸动画

void _startBreathingExercise() {
  setState(() {
    _isBreathing = true;
    _breathingCycle = 0;
    _currentPhase = BreathingPhase.inhale;
  });
  _runBreathingPhase();
}

void _runBreathingPhase() {
  if (!_isBreathing) return;

  int duration;
  switch (_currentPhase) {
    case BreathingPhase.inhale:
      duration = _breathingPattern['inhale']!;
      _breathingController.duration = Duration(seconds: duration);
      _breathingController.forward();
      break;
    case BreathingPhase.exhale:
      duration = _breathingPattern['exhale']!;
      _breathingController.duration = Duration(seconds: duration);
      _breathingController.reverse();
      break;
    // ...
  }

  _breathingTimer = Timer(Duration(seconds: duration), () {
    // 切换阶段并继续
  });
}

5.2 冥想计时

void _startMeditation() {
  setState(() {
    _isPlaying = true;
  });
  _timer = Timer.periodic(const Duration(seconds: 1), (timer) {
    setState(() {
      if (_remainingSeconds > 0) {
        _remainingSeconds--;
        _updateStep();
      } else {
        _completeMeditation();
      }
    });
  });
}

void _updateStep() {
  final totalDuration = widget.session.durationMinutes * 60;
  final stepDuration = totalDuration / widget.session.instructions.length;
  final elapsed = totalDuration - _remainingSeconds;
  _currentStep = (elapsed / stepDuration).floor().clamp(
    0,
    widget.session.instructions.length - 1,
  );
}

5.3 完成记录

void _completeMeditation() {
  _timer?.cancel();
  setState(() {
    _isPlaying = false;
    _isCompleted = true;
  });
  widget.onComplete();  // 回调更新历史记录
}

5.4 收藏功能

void _toggleFavorite(String id) {
  setState(() {
    if (_favorites.contains(id)) {
      _favorites.remove(id);
    } else {
      _favorites.add(id);
    }
  });
}

六、预置冥想课程

6.1 课程列表

序号 标题 分类 时长 难度
1 晨间觉醒 晨间冥想 10分钟 ★☆☆
2 4-7-8呼吸法 呼吸冥想 5分钟 ★☆☆
3 深度睡眠引导 睡眠冥想 20分钟 ★☆☆
4 专注力提升 专注冥想 15分钟 ★★☆
5 压力释放 减压冥想 12分钟 ★★☆
6 身体扫描 身体扫描 15分钟 ★☆☆
7 感恩之心 感恩冥想 10分钟 ★☆☆
8 深度放松 放松冥想 18分钟 ★☆☆

6.2 引导语示例

晨间觉醒引导语:

  1. 找一个安静的地方坐下,保持背部挺直
  2. 闭上眼睛,深呼吸三次
  3. 想象阳光从头顶缓缓流入身体
  4. 感受身体的每一个细胞正在苏醒
  5. 设定今天的意图和目标
  6. 带着感恩的心迎接新的一天

七、冥想知识

7.1 冥想类型

冥想类型

正念冥想

呼吸觉察

身体扫描

想法观察

专注冥想

对象专注

曼陀罗冥想

烛光冥想

运动冥想

行禅

瑜伽

太极

慈心冥想

自我慈爱

他人慈爱

普世慈爱

7.2 呼吸技巧

技巧 模式 功效
4-7-8呼吸 吸4秒-屏7秒-呼8秒 快速放松、助眠
箱式呼吸 吸4秒-屏4秒-呼4秒-屏4秒 平衡情绪、提升专注
腹式呼吸 深吸气-慢呼气 缓解焦虑、降低血压
交替鼻孔呼吸 左右鼻孔交替 平衡左右脑、净化经络

7.3 冥想建议

开始冥想

选择安静环境

设定固定时间

从短时间开始

保持耐心

持续练习

注意事项

不要评判自己

思绪飘走是正常的

温和地拉回注意力


八、扩展功能规划

8.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 冥想课程 呼吸练习 播放功能 音频播放 提醒功能 成就系统 社区功能 个性化推荐 数据同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 冥想指导应用开发计划

8.2 功能扩展建议

8.2.1 音频播放

集成冥想背景音乐:

  • 自然声音(雨声、海浪、鸟鸣)
  • 白噪音
  • 双耳节拍
  • 引导语音
8.2.2 提醒功能

定时冥想提醒:

  • 每日固定时间提醒
  • 自定义提醒频率
  • 智能推荐最佳时间
8.2.3 成就系统

激励持续练习:

  • 连续打卡徽章
  • 里程碑成就
  • 社区分享功能

九、注意事项

9.1 开发注意事项

  1. 动画性能:呼吸动画使用AnimationController优化性能

  2. Timer管理:及时取消Timer避免内存泄漏

  3. 状态同步:冥想完成后及时更新历史记录

  4. 深色主题:确保所有组件在深色背景下可读

9.2 常见问题

问题 原因 解决方案
动画不流畅 帧率过低 使用AnimatedBuilder
Timer未取消 页面退出未处理 在dispose中取消
状态不同步 未调用setState 在状态变更时调用setState

9.3 冥想提示

🧘 冥想小贴士 🧘

冥想不是要停止思考,而是觉察思考。
当思绪飘走时,温和地将注意力拉回即可。
持续的练习比单次长时间更重要。
每天5分钟,胜过每周一次30分钟。


十、运行说明

10.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+

10.2 运行命令

# 查看可用设备
flutter devices

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

# 运行到Windows
flutter run -d windows -t lib/main_meditation_guide.dart

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

十一、总结

冥想指导应用通过丰富的冥想课程、引导式呼吸练习和科学的进度追踪,为用户提供了一个全面的正念冥想平台。应用采用深色主题设计,营造宁静祥和的氛围;呼吸动画流畅自然,引导用户进入放松状态;冥想播放功能支持暂停和继续,适应不同使用场景。

核心功能涵盖八大冥想类型,从晨间觉醒到深度睡眠,从压力释放到感恩培养,满足不同用户的需求。呼吸练习采用经典的4-4-6-2模式,配合视觉动画引导,让用户轻松掌握正确的呼吸节奏。

通过本应用,希望能够帮助更多人建立冥想习惯,在繁忙的生活中找到内心的平静与力量,实现身心健康的平衡发展。

静心冥想,觉察当下

Logo

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

更多推荐