Flutter 框架跨平台鸿蒙开发 - 记忆胶囊应用
摘要: 记忆胶囊是一款创新的数字遗产应用,帮助用户将人生故事、情感和智慧以数字形式封存,在指定时间传递给特定接收人。应用提供8种记忆类型分类(如故事、智慧、爱意等),支持设置开启时间、加密保护和状态管理(封存中/待开启/已开启)。基于Flutter框架开发,采用Material Design 3设计规范,核心功能包括胶囊创建、时间计算和条件开启。通过结构化数据模型和可视化流程,实现数字记忆的安全保
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图





1.1 应用简介
记忆胶囊是一款独特的数字遗产应用,核心理念是"为后人留下你的数字记忆"。在这个数字化的时代,我们的记忆不再只是脑海中的片段,而是可以以数字形式保存、传承的珍贵财富。本应用让用户能够创建记忆胶囊,将人生故事、智慧感悟、爱意表达等内容封存起来,在指定的时间开启,传递给指定的人。
记忆胶囊的概念源于时间胶囊,但更加个人化和情感化。每个人的一生都有太多值得记录和传承的瞬间——那些人生的智慧、对家人的爱、未说出口的话、珍贵的回忆。记忆胶囊为这些珍贵的情感和智慧提供了一个安全的归宿,让它们能够在合适的时机传递给最珍视的人。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 胶囊创建 | 创建新的记忆胶囊 | 表单输入 + 类型选择 |
| 类型分类 | 按记忆类型分类管理 | 枚举分类 + 颜色标识 |
| 时间设定 | 设置胶囊开启时间 | 年限选择 + 日期计算 |
| 接收人指定 | 指定胶囊接收人 | 文本输入 + 关联显示 |
| 加密保护 | 可选的加密保护 | 开关控制 + 状态标识 |
| 胶囊开启 | 到期后开启胶囊 | 条件判断 + 内容展示 |
1.3 胶囊状态
| 序号 | 状态 | Emoji | 颜色 | 说明 |
|---|---|---|---|---|
| 1 | 封存中 | 🔒 | #7B1FA2 | 胶囊已创建,等待开启时间 |
| 2 | 待开启 | ⏳ | #FF9800 | 开启时间临近 |
| 3 | 已开启 | ✨ | #4CAF50 | 胶囊已打开,内容可见 |
1.4 记忆类型
| 序号 | 类型 | Emoji | 颜色 | 描述 |
|---|---|---|---|---|
| 1 | 故事 | 📖 | #E91E63 | 人生故事和经历 |
| 2 | 智慧 | 💡 | #FFC107 | 人生感悟和智慧 |
| 3 | 爱意 | ❤️ | #F44336 | 对亲人的爱与情感 |
| 4 | 建议 | 🎯 | #2196F3 | 给后人的建议和忠告 |
| 5 | 秘密 | 🤫 | #9C27B0 | 从未说出口的秘密 |
| 6 | 梦想 | 🌟 | #00BCD4 | 未实现的梦想和愿望 |
| 7 | 感恩 | 🙏 | #4CAF50 | 想要表达的感恩之情 |
| 8 | 传承 | 🏛️ | #795548 | 家族传承和遗产 |
1.5 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | setState | - |
| 动画控制 | AnimationController | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
二、项目结构
lib/
├── main_memory_capsule.dart # 应用主入口
│ ├── MemoryCapsuleApp # 根应用组件
│ ├── CapsuleStatus # 胶囊状态枚举
│ ├── MemoryType # 记忆类型枚举
│ ├── MemoryCapsule # 记忆胶囊模型
│ └── MemoryCapsuleHomePage # 主页面
三、数据模型
3.1 CapsuleStatus 枚举
enum CapsuleStatus {
sealed('封存中', '🔒', Color(0xFF7B1FA2)),
ready('待开启', '⏳', Color(0xFFFF9800)),
opened('已开启', '✨', Color(0xFF4CAF50));
final String label;
final String emoji;
final Color color;
}
3.2 MemoryType 枚举
enum MemoryType {
story('故事', '📖', Color(0xFFE91E63)),
wisdom('智慧', '💡', Color(0xFFFFC107)),
love('爱意', '❤️', Color(0xFFF44336)),
advice('建议', '🎯', Color(0xFF2196F3)),
secret('秘密', '🤫', Color(0xFF9C27B0)),
dream('梦想', '🌟', Color(0xFF00BCD4)),
gratitude('感恩', '🙏', Color(0xFF4CAF50)),
legacy('传承', '🏛️', Color(0xFF795548));
final String label;
final String emoji;
final Color color;
}
3.3 MemoryCapsule 模型
class MemoryCapsule {
final String id; // 胶囊唯一标识
final String title; // 胶囊标题
final MemoryType type; // 记忆类型
final String content; // 记忆内容
final String recipient; // 接收人
final DateTime createdAt; // 创建时间
final DateTime openAt; // 开启时间
final CapsuleStatus status; // 胶囊状态
final String? photoDescription; // 照片描述
final bool isEncrypted; // 是否加密
Duration get remainingTime => openAt.difference(DateTime.now());
bool get canOpen => DateTime.now().isAfter(openAt);
int get daysRemaining => remainingTime.inDays;
}
四、核心功能实现
4.1 胶囊创建流程
4.2 时间计算逻辑
void _createCapsule(
MemoryType type,
String title,
String content,
String recipient,
int openYears,
bool isEncrypted,
) {
final now = DateTime.now();
final openAt = DateTime(now.year + openYears, now.month, now.day);
final capsule = MemoryCapsule(
id: now.millisecondsSinceEpoch.toString(),
title: title,
type: type,
content: content,
recipient: recipient,
createdAt: now,
openAt: openAt,
status: CapsuleStatus.sealed,
isEncrypted: isEncrypted,
);
}
4.3 开启条件判断
bool get canOpen => DateTime.now().isAfter(openAt);
Duration get remainingTime => openAt.difference(DateTime.now());
int get daysRemaining => remainingTime.inDays;
4.4 胶囊开启流程
4.5 统计数据计算
Widget _buildStatsCard(int sealedCount, int openedCount) {
final sealedCount = _capsules.where((c) => c.status == CapsuleStatus.sealed).length;
final openedCount = _capsules.where((c) => c.status == CapsuleStatus.opened).length;
final totalCount = _capsules.length;
}
五、界面设计
5.1 主页面布局
┌─────────────────────────────────────┐
│ 💊 记忆胶囊 │
│ 为后人留下你的数字记忆 │
├─────────────────────────────────────┤
│ ┌─────────────────────────────┐ │
│ │ 我的记忆胶囊 │ │
│ │ 🔒封存中 ✨已开启 📦总计 │ │
│ │ 2 1 3 │ │
│ └─────────────────────────────┘ │
├─────────────────────────────────────┤
│ 最近的胶囊 │
│ ┌─────────────────────────────┐ │
│ │ 🔒 给孙子的信 封存中 │ │
│ │ 故事 · 给:孙子小明 │ │
│ │ 365天后 │ │
│ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ ✨ 人生智慧 已开启 │ │
│ │ 智慧 · 给:子女们 │ │
│ │ 可开启 │ │
│ └─────────────────────────────┘ │
├─────────────────────────────────────┤
│ 快速创建 │
│ ┌─────┐┌─────┐┌─────┐ │
│ │ 📖 ││ 💡 ││ ❤️ │ │
│ │故事 ││智慧 ││爱意 │ │
│ │记录 ││传承 ││表达 │ │
│ └─────┘└─────┘└─────┘ │
│ │
│ [创建胶囊] │
└─────────────────────────────────────┘
5.2 胶囊库页面
┌─────────────────────────────────────┐
│ 胶囊库 3个胶囊│
├─────────────────────────────────────┤
│ ┌─────────────────────────────┐ │
│ │ 🔒 给孙子的信 │ │
│ │ 故事 · 封存中 │ │
│ │ ┌───────────────────────┐ │ │
│ │ │👤 接收人: 孙子小明 │ │ │
│ │ │⏰ 开启时间: 2026年... │ │ │
│ │ └───────────────────────┘ │ │
│ │ 365天后开启 │ │
│ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ ✨ 人生智慧 │ │
│ │ 智慧 · 已开启 │ │
│ │ ┌───────────────────────┐ │ │
│ │ │👤 接收人: 子女们 │ │ │
│ │ │⏰ 开启时间已到 │ │ │
│ │ └───────────────────────┘ │ │
│ │ [开启胶囊] │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
5.3 创建胶囊弹窗
┌─────────────────────────────────────┐
│ ──── │
│ │
│ ➕ 创建记忆胶囊 │
│ │
│ 记忆类型 │
│ [📖故事] [💡智慧] [❤️爱意] │
│ [🎯建议] [🤫秘密] [🌟梦想] │
│ [🙏感恩] [🏛️传承] │
│ │
│ 胶囊标题 │
│ ┌─────────────────────────────┐ │
│ │ 给这个记忆起个名字 │ │
│ └─────────────────────────────┘ │
│ │
│ 接收人 │
│ ┌─────────────────────────────┐ │
│ │ 这个记忆留给谁? │ │
│ └─────────────────────────────┘ │
│ │
│ 记忆内容 │
│ ┌─────────────────────────────┐ │
│ │ 写下你想留给后人的话... │ │
│ │ │ │
│ │ │ │
│ └─────────────────────────────┘ │
│ │
│ 开启时间 │
│ [1年后] [3年后] [5年后] [10年后] │
│ │
│ 加密保护 [开关] │
│ 开启后需要密码才能查看内容 │
│ │
│ ┌─────────────────────────────┐ │
│ │ 封存胶囊 │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
六、动画效果
6.1 图标浮动动画
_floatController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 2000),
)..repeat(reverse: true);
AnimatedBuilder(
animation: _floatController,
builder: (context, child) {
return Transform.translate(
offset: Offset(0, _floatController.value * 5),
child: child,
);
},
)
6.2 脉冲动画
_pulseController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 1500),
)..repeat(reverse: true);
AnimatedBuilder(
animation: _pulseController,
builder: (context, child) {
return Container(
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.purple.withValues(
alpha: 0.3 + _pulseController.value * 0.2
),
blurRadius: 10 + _pulseController.value * 5,
),
],
),
);
},
)
七、运行与调试
7.1 运行命令
# 运行到鸿蒙设备
flutter run -d harmony lib/main_memory_capsule.dart
# 运行到Web服务器
flutter run -d web-server -t lib/main_memory_capsule.dart --web-port 8130
# 运行到Windows
flutter run -d windows -t lib/main_memory_capsule.dart
# 代码分析
flutter analyze lib/main_memory_capsule.dart
7.2 功能测试清单
| 测试项 | 测试内容 | 预期结果 |
|---|---|---|
| 创建胶囊 | 创建新的记忆胶囊 | 胶囊成功创建 |
| 类型选择 | 选择不同记忆类型 | 类型正确显示 |
| 时间设定 | 设置不同开启时间 | 时间正确计算 |
| 加密保护 | 开启加密功能 | 加密状态正确 |
| 胶囊开启 | 开启到期胶囊 | 内容正确展示 |
| 统计显示 | 查看胶囊统计 | 数据计算正确 |
八、扩展方向
8.1 后端集成
┌─────────────┐ HTTPS ┌─────────────┐
│ 客户端 │ ←─────────────→ │ 服务器 │
└─────────────┘ └─────────────┘
│ │
│ 胶囊数据同步 │
│ 用户认证 │
│ 通知推送 │
│ 多媒体存储 │
↓ ↓
┌─────────────┐ ┌─────────────┐
│ 本地存储 │ │ 云端数据库 │
└─────────────┘ └─────────────┘
8.2 功能扩展计划
| 版本 | 功能 | 描述 |
|---|---|---|
| v1.1 | 数据持久化 | 本地数据库存储 |
| v1.2 | 多媒体支持 | 添加照片、视频、音频 |
| v1.3 | 通知提醒 | 胶囊开启时推送通知 |
| v1.4 | 多人接收 | 支持多个接收人 |
| v1.5 | 社交分享 | 分享已开启的胶囊 |
8.3 高级功能
九、使用场景
9.1 典型使用场景
💊 记忆胶囊使用场景 💊
| 场景 | 描述 | 记忆类型 |
|---|---|---|
| 人生智慧 | 传承人生经验和智慧 | 智慧、建议 |
| 情感表达 | 表达未说出口的爱 | 爱意、感恩 |
| 秘密告白 | 分享从未说出的秘密 | 秘密 |
| 梦想传承 | 传递未实现的梦想 | 梦想、故事 |
| 家族传承 | 传承家族历史和传统 | 传承、故事 |
9.2 使用建议
┌─────────────────────────────────────────────────────────┐
│ 使用建议 │
├─────────────────────────────────────────────────────────┤
│ │
│ 📝 内容建议 │
│ • 真诚地表达自己的感受 │
│ • 分享人生经验和教训 │
│ • 记录珍贵的回忆和故事 │
│ • 表达对亲人的爱和感恩 │
│ │
│ ⏰ 时间建议 │
│ • 选择合适的开启时间 │
│ • 考虑接收人的年龄和状态 │
│ • 重要纪念日可以选择 │
│ • 给自己留出修改时间 │
│ │
│ 🔒 安全建议 │
│ • 敏感内容建议加密 │
│ • 妥善保管密码 │
│ • 定期检查胶囊状态 │
│ • 告知信任的人胶囊存在 │
│ │
└─────────────────────────────────────────────────────────┘
十、情感价值
10.1 记忆传承的意义
| 维度 | 意义 | 价值 |
|---|---|---|
| 情感 | 传递爱与关怀 | 情感连接 |
| 智慧 | 传承人生经验 | 精神财富 |
| 历史 | 记录家族故事 | 文化传承 |
| 身份 | 帮助后人了解根源 | 身份认同 |
10.2 数字遗产概念
💎 数字遗产的价值 💎
什么是数字遗产
- 数字形式保存的个人记忆
- 可以长期保存和传承
- 不受物理空间限制
- 随时随地可以访问
数字遗产的优势
- 永久保存,不会褪色
- 方便传递和分享
- 多媒体形式丰富
- 安全可靠有保障
十一、心理学视角
11.1 记忆与情感
┌─────────────────────────────────────────────────────────┐
│ 记忆与情感 │
├─────────────────────────────────────────────────────────┤
│ │
│ 🧠 记忆的本质 │
│ • 记忆是情感的载体 │
│ • 情感赋予记忆意义 │
│ • 记忆塑造身份认同 │
│ • 传承记忆延续生命 │
│ │
│ 💝 情感表达 │
│ • 帮助处理未完成的情感 │
│ • 表达平时难以启齿的爱 │
│ • 留下永恒的情感印记 │
│ • 让爱跨越时空传递 │
│ │
│ 🌈 心理健康 │
│ • 记录过程本身就是疗愈 │
│ • 帮助梳理人生经历 │
│ • 增强生命意义感 │
│ • 减少对死亡的恐惧 │
│ │
└─────────────────────────────────────────────────────────┘
11.2 传承心理学
| 心理需求 | 满足方式 | 应用价值 |
|---|---|---|
| 存在感 | 留下自己的印记 | 确认自我价值 |
| 连接感 | 与后人建立联系 | 延续情感纽带 |
| 意义感 | 传承有价值的内容 | 赋予生命意义 |
| 安全感 | 确保内容安全传递 | 减少后顾之忧 |
十二、总结
记忆胶囊应用通过"为后人留下你的数字记忆"的核心理念,为用户提供了一种独特的情感传承工具。应用涵盖胶囊创建、类型分类、时间设定、接收人指定、加密保护、胶囊开启六大核心功能,让用户能够将珍贵的记忆和情感封存起来,在合适的时机传递给最珍视的人。
应用采用紫色主题,象征神秘与珍贵。主页面清晰展示胶囊统计、最近的胶囊和快速创建入口。胶囊库页面展示所有胶囊,每个胶囊都包含类型、状态、接收人、开启时间等详细信息。
记忆类型涵盖故事、智慧、爱意、建议、秘密、梦想、感恩、传承八个维度,覆盖了人生中各种珍贵的情感和经历。胶囊状态分为封存中、待开启、已开启三种,让用户清晰了解每个胶囊的状态。
开启时间支持1年、3年、5年、10年四个选项,用户可以根据需要选择合适的开启时间。加密保护功能让敏感内容得到更好的保护,只有输入正确密码才能查看内容。
应用采用Material Design 3设计规范,遵循Flutter最佳实践,代码结构清晰,易于维护和扩展。后续版本计划增加数据持久化、多媒体支持、通知提醒、多人接收、社交分享等功能,为用户提供更完整的记忆传承体验。
通过记忆胶囊应用,用户可以将珍贵的记忆和情感封存起来,让爱与智慧跨越时空传递,为后人留下永恒的精神财富。
封存记忆,传承爱与智慧 💊
更多推荐


所有评论(0)