开源鸿蒙跨平台Flutter开发:生日纪念日提醒应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图



1.1 应用简介
生日纪念日提醒是一款贴心的生活管理应用,帮助用户记录和管理家人朋友的生日、重要纪念日等特殊日期,并提供提前提醒功能。应用不仅能在重要日子来临前发送提醒,还能根据关系、兴趣等因素推荐合适的礼物 ideas,让用户再也不会忘记重要日子。应用以温馨的粉色为主色调,象征关爱与温暖,涵盖日期管理、提醒设置、礼物推荐、个人中心四大模块。
用户可以添加各种类型的纪念日,设置提醒时间,添加详细信息和照片,应用会智能分析日期临近情况,提前发送提醒,并根据关系类型和对方兴趣推荐个性化的礼物建议。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 日期管理 | 生日、纪念日记录 | 本地数据库 |
| 智能提醒 | 提前提醒功能 | 系统通知 |
| 礼物推荐 | 个性化礼物建议 | 推荐算法 |
| 关系管理 | 联系人关系分类 | 标签系统 |
| 数据备份 | 云端备份恢复 | 云存储 |
| 统计分析 | 纪念日统计 | 数据可视化 |
1.3 纪念日类型定义
| 序号 | 类型名称 | Emoji | 描述 |
|---|---|---|---|
| 1 | 生日 | 🎂 | 个人生日 |
| 2 | 结婚纪念日 | 💍 | 结婚周年 |
| 3 | 相识纪念日 | 💕 | 相识/恋爱纪念日 |
| 4 | 毕业纪念日 | 🎓 | 毕业周年 |
| 5 | 入职纪念日 | 💼 | 工作周年 |
| 6 | 其他纪念日 | 📅 | 其他重要日期 |
1.4 提醒时间设置
| 序号 | 提醒时间 | Emoji | 提前天数 | 描述 |
|---|---|---|---|---|
| 1 | 当天 | ⏰ | 0 | 当天提醒 |
| 2 | 提前1天 | 1️⃣ | 1 | 提前一天提醒 |
| 3 | 提前3天 | 3️⃣ | 3 | 提前三天提醒 |
| 4 | 提前7天 | 7️⃣ | 7 | 提前一周提醒 |
| 5 | 提前14天 | 1️⃣4️⃣ | 14 | 提前两周提醒 |
| 6 | 自定义 | ⚙️ | 自定义 | 自定义提前天数 |
1.5 关系类型定义
| 序号 | 关系类型 | Emoji | 亲密度 | 描述 |
|---|---|---|---|---|
| 1 | 家人 | 👨👩👧👦 | 5 | 家庭成员 |
| 2 | 朋友 | 🤝 | 4 | 好朋友 |
| 3 | 同事 | 👥 | 3 | 工作同事 |
| 4 | 同学 | 🎓 | 3 | 同学关系 |
| 5 | 恋人 | 💑 | 5 | 恋爱关系 |
| 6 | 其他 | 👤 | 2 | 其他关系 |
1.6 礼物预算等级
| 序号 | 预算等级 | Emoji | 金额范围 | 描述 |
|---|---|---|---|---|
| 1 | 经济实惠 | 💰 | <¥100 | 小礼物 |
| 2 | 中等预算 | 💸 | ¥100-¥500 | 中等礼物 |
| 3 | 高端礼物 | 💎 | >¥500 | 贵重礼物 |
1.7 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 本地存储 | sqflite | >= 2.0.0 |
| 通知系统 | flutter_local_notifications | >= 10.0.0 |
| 日期处理 | intl | >= 0.17.0 |
| 云存储 | firebase_core | >= 2.0.0 |
| 设计规范 | Material Design 3 | - |
| 目标平台 | 鸿蒙OS / iOS / Android | API 21+ |
1.8 项目结构
lib/
└── main_birthday_anniversary_reminder.dart
├── BirthdayAnniversaryReminderApp # 应用入口
├── AnniversaryType # 纪念日类型枚举
├── ReminderTime # 提醒时间枚举
├── RelationshipType # 关系类型枚举
├── BudgetLevel # 礼物预算枚举
├── AnniversaryEvent # 纪念日事件模型
├── GiftIdea # 礼物建议模型
├── BirthdayAnniversaryHomePage # 主页面(底部导航)
├── _buildEventsPage # 事件页面
├── _buildRemindersPage # 提醒页面
├── _buildGiftsPage # 礼物页面
├── _buildProfilePage # 个人页面
├── AnniversaryCardWidget # 纪念日卡片组件
└── GiftRecommendationWidget # 礼物推荐组件
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 提醒流程
三、核心模块设计
3.1 数据模型设计
3.1.1 纪念日类型枚举 (AnniversaryType)
enum AnniversaryType {
birthday(
label: '生日',
emoji: '🎂',
description: '个人生日',
color: Color(0xFFE91E63),
),
wedding(
label: '结婚纪念日',
emoji: '💍',
description: '结婚周年',
color: Color(0xFF9C27B0),
),
meeting(
label: '相识纪念日',
emoji: '💕',
description: '相识/恋爱纪念日',
color: Color(0xFFF44336),
),
graduation(
label: '毕业纪念日',
emoji: '🎓',
description: '毕业周年',
color: Color(0xFF4CAF50),
),
work(
label: '入职纪念日',
emoji: '💼',
description: '工作周年',
color: Color(0xFF2196F3),
),
other(
label: '其他纪念日',
emoji: '📅',
description: '其他重要日期',
color: Color(0xFF607D8B),
);
final String label;
final String emoji;
final String description;
final Color color;
}
3.1.2 提醒时间枚举 (ReminderTime)
enum ReminderTime {
sameDay(label: '当天', emoji: '⏰', daysBefore: 0),
oneDay(label: '提前1天', emoji: '1️⃣', daysBefore: 1),
threeDays(label: '提前3天', emoji: '3️⃣', daysBefore: 3),
sevenDays(label: '提前7天', emoji: '7️⃣', daysBefore: 7),
fourteenDays(label: '提前14天', emoji: '1️⃣4️⃣', daysBefore: 14),
custom(label: '自定义', emoji: '⚙️', daysBefore: -1);
final String label;
final String emoji;
final int daysBefore;
}
3.1.3 纪念日事件模型 (AnniversaryEvent)
class AnniversaryEvent {
final String id; // 事件ID
final String name; // 事件名称
final String personName; // 相关人员姓名
final DateTime date; // 日期
final AnniversaryType type; // 类型
final RelationshipType relationship; // 关系
final ReminderTime reminderTime; // 提醒时间
final int customReminderDays; // 自定义提醒天数
final String notes; // 备注
final String photoPath; // 照片路径
final DateTime createdAt; // 创建时间
final DateTime updatedAt; // 更新时间
}
3.1.4 礼物建议模型 (GiftIdea)
class GiftIdea {
final String id; // 礼物ID
final String title; // 礼物名称
final String description; // 礼物描述
final BudgetLevel budget; // 预算等级
final List<String> categories; // 分类标签
final String imageUrl; // 图片URL
final double rating; // 评分
final int popularity; // 受欢迎度
}
3.1.5 纪念日类型分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 事件页结构
3.2.3 提醒页结构
3.2.4 礼物页结构
3.3 提醒系统设计
3.4 礼物推荐算法
四、UI设计规范
4.1 配色方案
应用以温馨的粉色为主色调,象征关爱与温暖:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #E91E63 (Pink) | 导航、主题元素 |
| 辅助色 | #F48FB1 | 事件页面 |
| 第三色 | #F8BBD0 | 提醒页面 |
| 强调色 | #FCE4EC | 礼物页面 |
| 背景色 | #FAFAFA | 页面背景 |
| 卡片背景 | #FFFFFF | 功能卡片 |
| 提醒背景 | #FFF3E0 | 提醒通知 |
4.2 纪念日类型颜色
| 类型 | 色值 | 视觉效果 |
|---|---|---|
| 生日 | #E91E63 | 浪漫粉色 |
| 结婚纪念日 | #9C27B0 | 优雅紫色 |
| 相识纪念日 | #F44336 | 热情红色 |
| 毕业纪念日 | #4CAF50 | 清新绿色 |
| 入职纪念日 | #2196F3 | 专业蓝色 |
| 其他纪念日 | #607D8B | 中性灰色 |
4.3 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 24px | Bold | 主色 |
| 事件标题 | 18px | Bold | #000000 |
| 日期显示 | 14px | Medium | #666666 |
| 提醒时间 | 12px | Regular | #999999 |
| 礼物名称 | 16px | Bold | #000000 |
4.4 组件规范
4.4.1 事件卡片
┌─────────────────────────────────────┐
│ ┌──────┐ │
│ │ 🎂 │ 张三的生日 │
│ └──────┘ 2024年5月20日 │
│ 还有15天 │
│ 👨👩👧👦 家人 · ⏰ 提前3天提醒 │
│ [编辑] [删除] │
└─────────────────────────────────────┘
4.4.2 添加事件界面
┌─────────────────────────────────────┐
│ 添加纪念日 │
│ │
│ 事件类型: [🎂 生日 ▼] │
│ 姓名: [张三] │
│ 日期: [2024-05-20] │
│ 关系: [👨👩👧👦 家人 ▼] │
│ 提醒时间: [3️⃣ 提前3天 ▼] │
│ 备注: [喜欢巧克力蛋糕] │
│ │
│ [保存] [取消] │
└─────────────────────────────────────┘
4.4.3 提醒设置界面
┌─────────────────────────────────────┐
│ 提醒设置 │
│ │
│ 默认提醒时间 │
│ [⏰ 当天] [1️⃣ 提前1天] [3️⃣ 提前3天] │
│ [7️⃣ 提前7天] [1️⃣4️⃣ 提前14天] [⚙️ 自定义] │
│ │
│ 通知权限 │
│ [开启通知权限] │
│ │
│ 提醒音效 │
│ [默认音效 ▼] │
└─────────────────────────────────────┘
4.4.4 礼物推荐卡片
┌─────────────────────────────────────┐
│ ┌─────────────────────────────┐ │
│ │ │ │
│ │ 🎁 │ │
│ │ [礼物图片占位] │ │
│ │ │ │
│ └─────────────────────────────┘ │
│ 精致巧克力礼盒 │
│ 💸 中等预算 · ⭐ 4.8 │
│ 适合生日、情人节等场合 │
│ [收藏] [查看详情] │
└─────────────────────────────────────┘
4.4.5 统计界面
┌─────────────────────────────────────┐
│ 纪念日统计 │
│ │
│ ┌─────────────────────────────┐ │
│ │ [饼图:类型分布] │ │
│ └─────────────────────────────┘ │
│ 生日: 12个 结婚: 3个 其他: 5个 │
│ │
│ 本月事件: 2个 │
│ 下月事件: 3个 │
│ 总事件: 20个 │
└─────────────────────────────────────┘
五、核心功能实现
5.1 事件管理实现
class EventManager {
final Database _database;
Future<void> addEvent(AnniversaryEvent event) async {
await _database.insert('events', {
'id': event.id,
'name': event.name,
'person_name': event.personName,
'date': event.date.millisecondsSinceEpoch,
'type': event.type.index,
'relationship': event.relationship.index,
'reminder_time': event.reminderTime.index,
'custom_reminder_days': event.customReminderDays,
'notes': event.notes,
'photo_path': event.photoPath,
'created_at': event.createdAt.millisecondsSinceEpoch,
'updated_at': event.updatedAt.millisecondsSinceEpoch,
});
await _scheduleReminder(event);
}
Future<List<AnniversaryEvent>> getUpcomingEvents(int days) async {
final now = DateTime.now();
final endDate = now.add(Duration(days: days));
final results = await _database.query(
'events',
where: 'date >= ? AND date <= ?',
whereArgs: [
now.millisecondsSinceEpoch,
endDate.millisecondsSinceEpoch,
],
orderBy: 'date ASC',
);
return results.map((map) => _fromMap(map)).toList();
}
}
5.2 提醒服务实现
class ReminderService {
final FlutterLocalNotificationsPlugin _notifications;
final EventManager _eventManager;
Future<void> initialize() async {
const AndroidInitializationSettings androidSettings = AndroidInitializationSettings('app_icon');
const InitializationSettings settings = InitializationSettings(android: androidSettings);
await _notifications.initialize(settings);
await _scheduleAllReminders();
}
Future<void> _scheduleReminder(AnniversaryEvent event) async {
final reminderDays = event.reminderTime == ReminderTime.custom
? event.customReminderDays
: event.reminderTime.daysBefore;
if (reminderDays < 0) return;
final reminderDate = event.date.subtract(Duration(days: reminderDays));
if (reminderDate.isAfter(DateTime.now())) {
await _notifications.schedule(
int.parse(event.id),
'${event.personName}的${event.type.label}',
'距离${event.personName}的${event.type.label}还有${reminderDays}天',
reminderDate,
NotificationDetails(
android: AndroidNotificationDetails(
'anniversary_channel',
'纪念日提醒',
importance: Importance.high,
),
),
);
}
}
}
5.3 礼物推荐实现
class GiftRecommender {
final List<GiftIdea> _giftDatabase;
Future<List<GiftIdea>> getRecommendations({
required RelationshipType relationship,
required AnniversaryType type,
required BudgetLevel budget,
}) async {
var recommendations = _giftDatabase.where((gift) {
return gift.budget == budget &&
_isSuitableForRelationship(gift, relationship) &&
_isSuitableForAnniversary(gift, type);
}).toList();
recommendations.sort((a, b) => b.popularity.compareTo(a.popularity));
return recommendations.take(10).toList();
}
bool _isSuitableForRelationship(GiftIdea gift, RelationshipType relationship) {
switch (relationship) {
case RelationshipType.family:
return gift.categories.contains('family');
case RelationshipType.friend:
return gift.categories.contains('friend');
case RelationshipType.lover:
return gift.categories.contains('romantic');
default:
return true;
}
}
}
5.4 数据同步实现
class DataSynchronizer {
final FirebaseFirestore _firestore;
final EventManager _eventManager;
Future<void> syncData() async {
final events = await _eventManager.getAllEvents();
for (final event in events) {
await _firestore.collection('events').doc(event.id).set({
'name': event.name,
'personName': event.personName,
'date': event.date,
'type': event.type.index,
'relationship': event.relationship.index,
'reminderTime': event.reminderTime.index,
'customReminderDays': event.customReminderDays,
'notes': event.notes,
'createdAt': event.createdAt,
'updatedAt': event.updatedAt,
});
}
}
Future<void> restoreData() async {
final snapshot = await _firestore.collection('events').get();
for (final doc in snapshot.docs) {
final data = doc.data();
final event = AnniversaryEvent(
id: doc.id,
name: data['name'],
personName: data['personName'],
date: (data['date'] as Timestamp).toDate(),
type: AnniversaryType.values[data['type']],
relationship: RelationshipType.values[data['relationship']],
reminderTime: ReminderTime.values[data['reminderTime']],
customReminderDays: data['customReminderDays'],
notes: data['notes'],
photoPath: data['photoPath'] ?? '',
createdAt: (data['createdAt'] as Timestamp).toDate(),
updatedAt: (data['updatedAt'] as Timestamp).toDate(),
);
await _eventManager.addEvent(event);
}
}
}
5.5 统计分析实现
class StatisticsService {
final EventManager _eventManager;
Future<Map<String, dynamic>> getStatistics() async {
final allEvents = await _eventManager.getAllEvents();
final typeCount = <AnniversaryType, int>{};
for (final event in allEvents) {
typeCount[event.type] = (typeCount[event.type] ?? 0) + 1;
}
final now = DateTime.now();
final thisMonth = DateTime(now.year, now.month, 1);
final nextMonth = DateTime(now.year, now.month + 1, 1);
final thisMonthEvents = allEvents.where((event) {
final eventDate = DateTime(event.date.year, event.date.month, event.date.day);
return eventDate.isAfter(thisMonth.subtract(Duration(days: 1))) &&
eventDate.isBefore(nextMonth);
}).length;
final nextMonthEvents = allEvents.where((event) {
final eventDate = DateTime(event.date.year, event.date.month, event.date.day);
return eventDate.isAfter(nextMonth.subtract(Duration(days: 1))) &&
eventDate.isBefore(DateTime(now.year, now.month + 2, 1));
}).length;
return {
'totalEvents': allEvents.length,
'typeCount': typeCount,
'thisMonthEvents': thisMonthEvents,
'nextMonthEvents': nextMonthEvents,
};
}
}
六、交互设计
6.1 事件管理流程
6.2 提醒流程
6.3 礼物推荐流程
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 智能助手
智能功能:
- 语音添加事件
- 智能礼物推荐
- 自动生成祝福语
- 提醒频率优化
7.2.2 社交分享
社交功能:
- 一键分享纪念日
- 群聊提醒
- 协作管理
- 集体礼物筹钱
7.2.3 日历集成
集成功能:
- 系统日历同步
- ical导出导入
- 多日历支持
- 节假日提醒
八、注意事项
8.1 开发注意事项
-
权限管理:通知权限需正确处理
-
数据安全:个人信息需加密存储
-
提醒准确性:时区和日期计算需准确
-
用户体验:界面需简洁直观
-
电池优化:后台提醒需优化功耗
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 提醒不触发 | 通知权限未开启 | 引导用户开启权限 |
| 日期错误 | 时区设置问题 | 统一使用UTC时间 |
| 数据丢失 | 未备份 | 自动云备份 |
| 电池消耗快 | 后台运行 | 优化后台处理 |
| 礼物推荐不精准 | 数据不足 | 增加礼物数据 |
8.3 使用技巧
🎂 生日纪念日提醒使用技巧 🎂
添加事件技巧
- 批量添加家人生日,节省时间
- 为重要事件添加详细备注
- 设置合适的提醒时间,避免临时抱佛脚
- 使用照片功能,增加事件辨识度
提醒设置建议
- 家人朋友:提前3-7天提醒
- 重要纪念日:提前14天提醒
- 一般事件:当天提醒
- 自定义提醒:根据需要设置
礼物选择建议
- 家人:实用贴心的礼物
- 朋友:符合兴趣爱好的礼物
- 恋人:浪漫有意义的礼物
- 同事:专业得体的礼物
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 通知权限 | 允许系统通知 |
| 存储空间 | 建议50MB以上 |
| 鸿蒙OS | API 21+ |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到iOS设备
flutter run -t lib/main_birthday_anniversary_reminder.dart
# 运行到Android设备
flutter run -t lib/main_birthday_anniversary_reminder.dart
# 运行到Web服务器
flutter run -d web-server -t lib/main_birthday_anniversary_reminder.dart --web-port 8143
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_birthday_anniversary_reminder.dart
# 代码分析
flutter analyze lib/main_birthday_anniversary_reminder.dart
十、总结
生日纪念日提醒应用通过事件管理、提醒设置、礼物推荐、个人中心四大模块,为用户提供了一个贴心的生活管理工具。应用不仅能帮助用户记录和管理各种重要日期,还能在关键时刻提供提醒,推荐合适的礼物,让用户再也不会忘记重要日子。
核心功能涵盖事件管理、智能提醒、礼物推荐、数据统计四大模块。纪念日类型包括生日、结婚纪念日、相识纪念日、毕业纪念日、入职纪念日等多种类型;提醒时间从当天到提前14天,满足不同场景需求;关系类型从家人到同事,涵盖各种社交关系;礼物推荐根据关系、预算、场合等因素,提供个性化建议。
应用采用 Material Design 3 设计规范,以温馨的粉色为主色调,象征关爱与温暖。通过本应用,希望能够帮助用户更好地管理人际关系,维护重要情感连接,让生活更加温馨和有序。
生日纪念日提醒——让重要日子不再被遗忘
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)