拖延症救星应用


欢迎加入开源鸿蒙跨平台社区:
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 整体架构图

Algorithm Layer

Presentation Layer

Data Layer

UrgencyLevel
紧急程度

DeadlineTask
任务模型

TaskCategory
任务分类

TaskStats
统计模型

主页面
ProcrastinationKillerHomePage

任务页面

日历页面

统计页面

设置页面

任务列表

紧急任务

普通任务

已完成任务

日期分组

任务卡片

完成率卡片

分类分布

紧急程度分布

紧急程度判定

提醒频率计算

进度计算

2.2 类图设计

has

has

manages

calculates

ProcrastinationKillerApp

+Widget build()

«enumeration»

UrgencyLevel

+String label

+IconData icon

+Color color

+String description

+relaxed()

+normal()

+attention()

+urgent()

+critical()

«enumeration»

TaskCategory

+String label

+IconData icon

+Color color

+work()

+study()

+life()

+health()

+finance()

+social()

+other()

DeadlineTask

+String id

+String title

+String? description

+TaskCategory category

+DateTime deadline

+DateTime createdAt

+bool completed

+int priority

+Duration get remainingTime

+bool get isOverdue

+double get progress

+UrgencyLevel get urgencyLevel

+int get reminderInterval

+String get remainingTimeText

TaskStats

+int totalTasks

+int completedTasks

+int overdueTasks

+int urgentTasks

+double completionRate

ProcrastinationKillerHomePage

-int _selectedIndex

-List<DeadlineTask> _tasks

-List<DeadlineTask> _completedTasks

-Timer _updateTimer

+Widget build()

-_calculateStats()

-_completeTask()

-_deleteTask()

2.3 页面导航流程

任务

日历

统计

设置

应用启动

任务页面

底部导航

任务列表

点击任务

查看详情

完成/删除

添加任务

填写表单

设置截止时间

创建任务

日期分组视图

查看当天任务

完成率展示

分类分布

紧急程度分布

系统设置

2.4 紧急程度判定流程

紧急程度 任务模型 系统 紧急程度 任务模型 系统 alt [已超时] [<1小时] [1-6小时] [6-24小时] [24-72小时] [>72小时] 获取剩余时间 计算deadline - now 返回危急 返回危急 返回紧急 返回注意 返回正常 返回轻松

三、核心模块设计

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 紧急程度分布
33% 17% 17% 17% 17% 任务紧急程度分布 轻松 正常 注意 紧急 危急

3.2 页面结构设计

3.2.1 主页面布局

ProcrastinationKillerHomePage

IndexedStack

任务页面

日历页面

统计页面

设置页面

NavigationBar

FloatingActionButton

3.2.2 任务页面结构

任务页面

SliverAppBar

紧急任务区

普通任务区

已完成区

统计头部

进行中/已完成/超时/紧急

脉冲动画标题

紧急任务卡片

任务卡片列表

已完成卡片列表

3.2.3 任务卡片结构

任务卡片

头部区域

倒计时区域

进度条

底部信息

分类图标

任务名称

紧急程度标签

剩余时间

提醒间隔

截止时间

标签列表

3.2.4 统计页面结构

统计页面

完成率卡片

任务分布

紧急程度分布

完成率百分比

总任务/已完成/超时

分类进度条

紧急程度标签

3.3 紧急程度判定算法

<1小时

1-6小时

6-24小时

24-72小时

>72小时

获取剩余时间

是否超时?

危急

剩余时间

紧急

注意

正常

轻松

3.4 提醒频率计算

>72小时

24-72小时

6-24小时

1-6小时

<1小时/超时

计算提醒间隔

剩余时间

120分钟

60分钟

30分钟

15分钟

5分钟


四、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 任务创建流程

表单弹窗 任务页面 用户 表单弹窗 任务页面 用户 点击添加按钮 显示表单 展示输入项 输入任务名称 选择分类 设置截止时间 选择优先级 点击创建 创建DeadlineTask 显示新任务

6.2 紧急程度变化流程

任务创建

计算剩余时间

判定紧急程度

显示对应颜色

每秒更新

紧急程度变化?

更新UI样式

保持原样

6.3 任务完成流程

点击完成

点击删除

进行中

已完成

已删除


七、扩展功能规划

7.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 进阶版本 拖延症救星应用开发计划

7.2 功能扩展建议

7.2.1 本地推送通知

通知提醒功能:

  • 根据提醒间隔发送通知
  • 紧急任务特殊提醒音
  • 通知点击跳转任务详情
7.2.2 番茄钟集成

专注计时功能:

  • 任务关联番茄钟
  • 专注时间统计
  • 休息提醒
7.2.3 习惯养成

习惯追踪功能:

  • 每日任务打卡
  • 连续完成奖励
  • 习惯养成报告

八、注意事项

8.1 开发注意事项

  1. 定时更新:使用Timer每秒更新剩余时间

  2. 动画控制:紧急任务使用脉冲动画增强紧迫感

  3. 状态管理:完成任务后需要更新两个列表

  4. 性能优化:避免频繁重建整个列表

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设计规范,以红色为主色调,界面紧迫感强。通过本应用,希望能够帮助拖延症患者建立时间观念,养成按时完成任务的好习惯,战胜拖延症。

行动起来,战胜拖延!

Logo

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

更多推荐