Flutter 框架跨平台鸿蒙开发 - 拖延症救星
运行效果图拖延症救星应用是一款专为拖延症患者设计的任务管理工具,通过设置最后期限和动态提醒频率,帮助用户克服拖延习惯,按时完成任务。应用以红色为主色调,象征紧迫感和行动力。应用涵盖了任务管理、日历视图、数据统计、系统设置四大模块,支持7种任务分类、5级紧急程度、智能提醒频率算法。通过倒计时显示、紧急程度判定、动态提醒间隔等功能,让用户时刻保持对任务紧迫感的认知,激发行动动力。拖延症救星应用通过最后
拖延症救星应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图





1.1 应用简介
拖延症救星应用是一款专为拖延症患者设计的任务管理工具,通过设置最后期限和动态提醒频率,帮助用户克服拖延习惯,按时完成任务。应用以红色为主色调,象征紧迫感和行动力。
应用涵盖了任务管理、日历视图、数据统计、系统设置四大模块,支持7种任务分类、5级紧急程度、智能提醒频率算法。通过倒计时显示、紧急程度判定、动态提醒间隔等功能,让用户时刻保持对任务紧迫感的认知,激发行动动力。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 任务管理 | 创建、查看、完成任务 | 列表卡片展示 |
| 最后期限 | 设置截止时间和日期 | 日期时间选择器 |
| 倒计时 | 实时显示剩余时间 | Timer定时更新 |
| 紧急程度 | 5级自动判定 | 时间差计算 |
| 动态提醒 | 越近提醒越频繁 | 智能算法计算 |
| 数据统计 | 完成率、分类分布 | 图表可视化 |
1.3 紧急程度等级
| 序号 | 等级名称 | 图标 | 颜色 | 时间条件 | 描述 |
|---|---|---|---|---|---|
| 1 | 轻松 | 😊 | #4CAF50 | >72小时 | 还有充足时间 |
| 2 | 正常 | 😐 | #2196F3 | 24-72小时 | 按计划进行 |
| 3 | 注意 | 😕 | #FF9800 | 6-24小时 | 需要开始关注 |
| 4 | 紧急 | ⚠️ | #FF5722 | 1-6小时 | 时间紧迫! |
| 5 | 危急 | ❌ | #E53935 | <1小时/超时 | 立即行动! |
1.4 动态提醒频率
| 剩余时间 | 提醒间隔 | 说明 |
|---|---|---|
| >72小时 | 120分钟 | 每两小时提醒一次 |
| 24-72小时 | 60分钟 | 每小时提醒一次 |
| 6-24小时 | 30分钟 | 每半小时提醒一次 |
| 1-6小时 | 15分钟 | 每15分钟提醒一次 |
| <1小时/超时 | 5分钟 | 每5分钟提醒一次 |
1.5 任务分类
| 序号 | 分类名称 | 图标 | 颜色 |
|---|---|---|---|
| 1 | 工作 | 💼 | #3F51B5 |
| 2 | 学习 | 🎓 | #009688 |
| 3 | 生活 | 🏠 | #795548 |
| 4 | 健康 | ❤️ | #E91E63 |
| 5 | 财务 | 💰 | #4CAF50 |
| 6 | 社交 | 👥 | #9C27B0 |
| 7 | 其他 | ⋯ | #607D8B |
1.6 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 定时更新 | Timer | - |
| 动画控制 | AnimationController | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.7 项目结构
lib/
└── main_procrastination_killer.dart
├── ProcrastinationKillerApp # 应用入口
├── UrgencyLevel # 紧急程度枚举
├── TaskCategory # 任务分类枚举
├── DeadlineTask # 任务数据模型
├── TaskStats # 统计数据模型
├── ProcrastinationKillerHomePage # 主页面
├── _buildTaskPage # 任务页面
├── _buildCalendarPage # 日历页面
├── _buildStatsPage # 统计页面
└── _buildSettingsPage # 设置页面
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 紧急程度判定流程
三、核心模块设计
3.1 数据模型设计
3.1.1 紧急程度枚举 (UrgencyLevel)
enum UrgencyLevel {
relaxed('轻松', Icons.sentiment_satisfied, Color(0xFF4CAF50), '还有充足时间'),
normal('正常', Icons.sentiment_neutral, Color(0xFF2196F3), '按计划进行'),
attention('注意', Icons.sentiment_dissatisfied, Color(0xFFFF9800), '需要开始关注'),
urgent('紧急', Icons.warning, Color(0xFFFF5722), '时间紧迫!'),
critical('危急', Icons.error, Color(0xFFE53935), '立即行动!');
final String label; // 等级名称
final IconData icon; // 等级图标
final Color color; // 主题颜色
final String description; // 等级描述
}
3.1.2 任务分类枚举 (TaskCategory)
enum TaskCategory {
work('工作', Icons.work, Color(0xFF3F51B5)),
study('学习', Icons.school, Color(0xFF009688)),
life('生活', Icons.home, Color(0xFF795548)),
health('健康', Icons.favorite, Color(0xFFE91E63)),
finance('财务', Icons.attach_money, Color(0xFF4CAF50)),
social('社交', Icons.people, Color(0xFF9C27B0)),
other('其他', Icons.more_horiz, Color(0xFF607D8B));
final String label; // 分类名称
final IconData icon; // 分类图标
final Color color; // 主题颜色
}
3.1.3 任务模型 (DeadlineTask)
class DeadlineTask {
final String id; // 唯一标识
final String title; // 任务名称
final String? description; // 任务描述
final TaskCategory category; // 任务分类
final DateTime deadline; // 截止时间
final DateTime createdAt; // 创建时间
final bool completed; // 是否完成
final int priority; // 优先级(1-3)
final List<String> tags; // 标签列表
Duration get remainingTime; // 剩余时间
bool get isOverdue; // 是否超时
double get progress; // 进度百分比
UrgencyLevel get urgencyLevel; // 紧急程度
int get reminderInterval; // 提醒间隔(分钟)
String get remainingTimeText; // 格式化剩余时间
}
3.1.4 统计模型 (TaskStats)
class TaskStats {
final int totalTasks; // 总任务数
final int completedTasks; // 已完成数
final int overdueTasks; // 超时数
final int urgentTasks; // 紧急数
final double completionRate; // 完成率
}
3.1.5 紧急程度分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 任务页面结构
3.2.3 任务卡片结构
3.2.4 统计页面结构
3.3 紧急程度判定算法
3.4 提醒频率计算
四、UI设计规范
4.1 配色方案
应用采用红色为主色调,象征紧迫感和行动力:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #E53935 (Red) | 导航、强调元素 |
| 轻松 | #4CAF50 | 绿色 |
| 正常 | #2196F3 | 蓝色 |
| 注意 | #FF9800 | 橙色 |
| 紧急 | #FF5722 | 深橙色 |
| 危急 | #E53935 | 红色 |
4.2 紧急程度配色
| 等级 | 色值 | 情感表达 |
|---|---|---|
| 轻松 | #4CAF50 | 放心安心 |
| 正常 | #2196F3 | 平稳有序 |
| 注意 | #FF9800 | 提醒关注 |
| 紧急 | #FF5722 | 紧迫感 |
| 危急 | #E53935 | 立即行动 |
4.3 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 剩余时间 | 28px | Bold | 紧急程度色 |
| 完成率 | 48px | Bold | #FFFFFF |
| 任务名称 | 15px | SemiBold | #000000 |
| 紧急程度标签 | 10px | Bold | 紧急程度色 |
| 提醒间隔 | 11px | Regular | #666666 |
4.4 组件规范
4.4.1 紧急任务标题
🔴 紧急任务 2
4.4.2 任务卡片
┌─────────────────────────────────────────────────┐
│ ┌────┐ 完成项目报告 [紧急] │
│ │ 💼 │ 工作 │
│ └────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ ⏱ 2小时 30分钟 每15分钟提醒 │ │
│ └─────────────────────────────────────────────┘ │
│ ████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │
│ 截止: 01/15 18:00 [重要] [工作] │
└─────────────────────────────────────────────────┘
4.4.3 完成率卡片
┌─────────────────────────────────────────────────┐
│ 完成率 │
│ │
│ 75.0% │
│ │
│ 📋 12 ✓ 9 ⚠ 1 │
│ 总任务 已完成 已超时 │
└─────────────────────────────────────────────────┘
4.4.4 紧急程度标签
[😊轻松] [😐正常] [😕注意] [⚠️紧急] [❌危急]
五、核心功能实现
5.1 紧急程度判定
UrgencyLevel get urgencyLevel {
if (isOverdue) return UrgencyLevel.critical;
final hours = remainingTime.inHours;
if (hours < 1) return UrgencyLevel.critical;
if (hours < 6) return UrgencyLevel.urgent;
if (hours < 24) return UrgencyLevel.attention;
if (hours < 72) return UrgencyLevel.normal;
return UrgencyLevel.relaxed;
}
5.2 提醒频率计算
int get reminderInterval {
final hours = remainingTime.inHours;
if (isOverdue) return 5;
if (hours < 1) return 5;
if (hours < 6) return 15;
if (hours < 24) return 30;
if (hours < 72) return 60;
return 120;
}
5.3 剩余时间格式化
String get remainingTimeText {
if (isOverdue) {
final overdue = DateTime.now().difference(deadline);
return '已超时 ${overdue.inHours}小时';
}
final remaining = remainingTime;
final days = remaining.inDays;
final hours = remaining.inHours % 24;
final minutes = remaining.inMinutes % 60;
if (days > 0) {
return '$days天 $hours小时';
} else if (hours > 0) {
return '$hours小时 $minutes分钟';
} else {
return '$minutes分钟';
}
}
5.4 进度计算
double get progress {
final total = deadline.difference(createdAt).inSeconds;
final remaining = remainingTime.inSeconds;
if (total <= 0) return 1.0;
return 1.0 - (remaining / total).clamp(0.0, 1.0);
}
5.5 定时更新
void initState() {
super.initState();
_updateTimer = Timer.periodic(const Duration(seconds: 1), (_) {
setState(() {});
});
}
void dispose() {
_updateTimer?.cancel();
super.dispose();
}
5.6 脉冲动画
AnimatedBuilder(
animation: _pulseController,
builder: (context, child) {
return Container(
width: 12,
height: 12,
decoration: BoxDecoration(
color: Colors.red.withValues(alpha: 0.5 + _pulseController.value * 0.5),
shape: BoxShape.circle,
),
);
},
)
六、交互设计
6.1 任务创建流程
6.2 紧急程度变化流程
6.3 任务完成流程
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 本地推送通知
通知提醒功能:
- 根据提醒间隔发送通知
- 紧急任务特殊提醒音
- 通知点击跳转任务详情
7.2.2 番茄钟集成
专注计时功能:
- 任务关联番茄钟
- 专注时间统计
- 休息提醒
7.2.3 习惯养成
习惯追踪功能:
- 每日任务打卡
- 连续完成奖励
- 习惯养成报告
八、注意事项
8.1 开发注意事项
-
定时更新:使用Timer每秒更新剩余时间
-
动画控制:紧急任务使用脉冲动画增强紧迫感
-
状态管理:完成任务后需要更新两个列表
-
性能优化:避免频繁重建整个列表
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 倒计时不更新 | Timer未启动 | 检查initState |
| 紧急程度错误 | 时间计算错误 | 检查remainingTime |
| 动画不播放 | 控制器未启动 | 调用repeat()方法 |
| 进度条异常 | 进度计算溢出 | 使用clamp限制 |
8.3 拖延症小贴士
💪 战胜拖延症小贴士 💪
两分钟法则:如果一件事两分钟内能完成,立即去做
番茄工作法:专注25分钟,休息5分钟
分解任务:把大任务拆成小步骤
设定奖励:完成任务后给自己小奖励
立即行动:不要等待完美时机,现在就是最好的时机
行动起来,战胜拖延!
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_procrastination_killer.dart --web-port 8112
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_procrastination_killer.dart
# 运行到Windows
flutter run -d windows -t lib/main_procrastination_killer.dart
# 代码分析
flutter analyze lib/main_procrastination_killer.dart
十、总结
拖延症救星应用通过最后期限设置和动态提醒频率,帮助用户克服拖延习惯。应用支持5级紧急程度自动判定,根据剩余时间动态调整提醒频率,越临近截止时间提醒越频繁,让用户时刻保持对任务紧迫感的认知。
核心功能涵盖任务管理、紧急程度判定、动态提醒、数据统计四大模块。任务管理支持创建、查看、完成任务;紧急程度判定根据剩余时间自动计算;动态提醒频率从120分钟到5分钟递进;数据统计展示完成率、分类分布、紧急程度分布。
应用采用Material Design 3设计规范,以红色为主色调,界面紧迫感强。通过本应用,希望能够帮助拖延症患者建立时间观念,养成按时完成任务的好习惯,战胜拖延症。
行动起来,战胜拖延!
更多推荐

所有评论(0)