开源鸿蒙社区: https://openharmonycrossplatform.csdn.net

一、应用概述

运行效果图

image-20260409222920598

image-20260409222925874

image-20260409222929936

image-20260409222934610

时间胶囊慢递是一款生活创意类应用,让用户能够给未来的自己写一封信、录一段视频,设定开启时间后,到时自动"寄"给用户。这是一种独特的情感记录方式,帮助用户跨越时间与自己对话,在未来的某一天遇见过去的自己。

核心价值

维度描述
情感寄托将当下的心情、期望、祝福封存,在未来开启时获得独特的情感体验
自我对话跨越时间的自我交流,见证个人成长与变化
仪式感为人生重要时刻增添仪式感,记录生命中值得铭记的瞬间
时间管理帮助用户设定长期目标,在未来回顾当初的期许

二、功能架构

时间胶囊慢递

创建胶囊

我的胶囊

开启记录

个人中心

选择类型

填写内容

设定时间

添加标签

待开启列表

进度展示

到期提醒

开启操作

历史记录

内容回顾

时间统计

数据统计

通知设置

隐私保护

数据备份


三、数据模型设计

3.1 时间胶囊模型

class TimeCapsule {
  final String id;              // 胶囊唯一标识
  final String title;           // 胶囊标题
  final CapsuleType type;       // 胶囊类型
  final CapsuleStatus status;   // 胶囊状态
  final DateTime createdAt;     // 创建时间
  final DateTime openAt;        // 开启时间
  final String content;         // 文字内容
  final String? mediaPath;      // 媒体文件路径
  final List<String> tags;      // 内容标签
  final String? mood;           // 心情标签
  final bool isOpened;          // 是否已开启
}

3.2 胶囊类型枚举

类型标签图标颜色值
letter信件mail_outline#6B5B95
video视频videocam_outlined#E74C3C
voice语音mic_outlined#3498DB
photo图片photo_outlined#27AE60
mixed混合dashboard_outlined#F39C12

3.3 胶囊状态枚举

状态标签图标颜色值
pending待开启lock_outline#9B59B6
opened已开启lock_open_outlined#27AE60
expired已过期schedule_outlined#E74C3C
archived已归档archive_outlined#95A5A6

3.4 时间预设枚举

预设标签天数
oneWeek一周后7
oneMonth一月后30
threeMonths三月后90
halfYear半年后180
oneYear一年后365
threeYears三年后1095
fiveYears五年后1825
custom自定义0

四、界面设计

4.1 整体布局

应用采用底部标签导航结构,包含四个主要页面:

底部导航

创建

胶囊

记录

我的

胶囊类型选择

内容编辑区

时间设定器

标签选择器

待开启胶囊列表

胶囊卡片展示

进度条显示

已开启记录列表

历史回顾卡片

用户信息区

数据统计卡

设置选项列表

4.2 配色方案

应用采用深色主题,营造神秘、温馨的氛围:

元素颜色值用途
Primary#6B5B95主色调,紫罗兰色
Secondary#88B04B辅助色,自然绿
Tertiary#F7CAC9点缀色,玫瑰粉
Background#0F0F23背景色,深邃夜空
Surface#1A1A2E卡片背景

4.3 核心组件

胶囊卡片组件

每个胶囊卡片展示以下信息:

  • 胶囊类型图标与颜色
  • 胶囊标题与创建日期
  • 开启状态标签
  • 时间进度条
  • 剩余时间/开启状态
  • 心情标签
  • 内容标签列表
开启对话框

当胶囊到期后,点击卡片弹出开启对话框:

  • 仪式感的开启动画
  • 创建时间与开启时间对比
  • 完整内容展示
  • 标签回顾
  • 确认开启按钮

五、核心功能实现

5.1 胶囊创建流程

通过

失败

开始创建

选择胶囊类型

输入标题

填写内容

选择开启时间

是否自定义时间?

打开日期选择器

使用预设时间

选择心情标签

选择内容标签

点击封存按钮

验证内容

创建胶囊成功

提示补充信息

5.2 时间计算逻辑

Duration get remainingTime => openAt.difference(DateTime.now());

bool get canOpen => DateTime.now().isAfter(openAt);

double get progress {
  final total = openAt.difference(createdAt).inSeconds;
  final elapsed = DateTime.now().difference(createdAt).inSeconds;
  if (total <= 0) return 1.0;
  return (elapsed / total).clamp(0.0, 1.0);
}

5.3 胶囊开启流程

数据层 应用 用户 数据层 应用 用户 点击到期胶囊 检查canOpen状态 显示开启对话框 确认开启 更新胶囊状态 返回更新结果 添加到开启记录 显示开启成功

六、状态管理

6.1 主页状态

class _TimeCapsuleHomePageState extends State<TimeCapsuleHomePage>
    with SingleTickerProviderStateMixin {
  late TabController _tabController;
  final List<TimeCapsule> _capsules = [];
  final List<TimeCapsule> _openedRecords = [];
  int _totalCapsules = 0;
  int _pendingCapsules = 0;
  int _openedCapsules = 0;
}

6.2 统计数据更新

void _updateStatistics() {
  _totalCapsules = _capsules.length;
  _pendingCapsules = _capsules.where((c) => c.status == CapsuleStatus.pending).length;
  _openedCapsules = _capsules.where((c) => c.status == CapsuleStatus.opened).length;
}

七、技术实现细节

7.1 依赖配置

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2

environment:
  sdk: '>=3.0.0 <4.0.0'

7.2 主题配置

ThemeData(
  useMaterial3: true,
  brightness: Brightness.dark,
  colorScheme: ColorScheme.dark(
    primary: const Color(0xFF6B5B95),
    secondary: const Color(0xFF88B04B),
    tertiary: const Color(0xFFF7CAC9),
    surface: const Color(0xFF1A1A2E),
    background: const Color(0xFF16213E),
  ),
)

7.3 渐变背景

Container(
  decoration: const BoxDecoration(
    gradient: LinearGradient(
      begin: Alignment.topLeft,
      end: Alignment.bottomRight,
      colors: [
        Color(0xFF0F0F23),
        Color(0xFF1A1A2E),
        Color(0xFF16213E),
      ],
    ),
  ),
)

八、扩展功能规划

8.1 短期规划

功能描述优先级
媒体附件支持添加图片、视频、语音文件
本地推送胶囊到期时发送本地通知提醒
数据持久化使用SQLite或Hive存储胶囊数据
密码保护为胶囊设置开启密码

8.2 中期规划

功能描述优先级
云端同步支持多设备数据同步
社交分享开启后可分享到社交平台
胶囊模板提供预设的胶囊内容模板
统计图表可视化展示胶囊数据统计

8.3 长期规划

功能描述优先级
共享胶囊支持多人共同创建胶囊
位置触发到达特定地点时开启胶囊
AI助手AI帮助优化胶囊内容

九、项目结构

lib/
├── main_time_capsule.dart      # 应用入口
│   ├── TimeCapsuleApp          # 应用配置
│   ├── TimeCapsuleHomePage     # 主页面
│   ├── _CreateCapsuleTab       # 创建胶囊页
│   ├── _MyCapsulesTab          # 我的胶囊页
│   ├── _OpenedRecordsTab       # 开启记录页
│   ├── _SettingsTab            # 个人中心页
│   ├── _CapsuleCard            # 胶囊卡片组件
│   ├── _CapsuleOpenDialog      # 开启对话框
│   └── _OpenedRecordCard       # 记录卡片组件
│
├── models/
│   └── time_capsule.dart       # 数据模型
│
├── enums/
│   ├── capsule_type.dart       # 胶囊类型枚举
│   ├── capsule_status.dart     # 胶囊状态枚举
│   └── time_preset.dart        # 时间预设枚举
│
└── utils/
    └── time_utils.dart         # 时间工具类

十、开发说明

10.1 运行方式

# 获取依赖
flutter pub get

# 运行应用
flutter run -d <device_id>

# 指定入口文件运行
flutter run -d <device_id> -t lib/main_time_capsule.dart

10.2 注意事项

  1. 时间精度:胶囊开启时间精确到日期,不考虑具体时刻
  2. 数据存储:当前版本使用内存存储,重启后数据丢失
  3. 媒体文件:视频、语音、图片功能需要配合文件系统实现
  4. 后台提醒:需要配置后台任务与本地通知权限


记录现在,遇见未来的自己

Time Capsule - A Letter to Your Future Self

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐