番茄钟规划:鸿蒙AI应用开发实战——AI时间管理,效率提升看得见

一、引言

在信息爆炸的时代,保持专注变得越来越困难。番茄工作法作为一种经典的时间管理方法,通过"专注25分钟+休息5分钟"的循环模式,帮助人们提高工作效率。然而,手动计算番茄钟时间、安排休息间隔、处理长休息时机,往往让人感到繁琐。

番茄钟规划 正是为了解决这一痛点而诞生的鸿蒙AI应用。用户只需选择任务数量(1-10个)、专注时长(15/25/30/45分钟)和开始时间,AI即可自动生成完整的时间块序列,包括专注时段、短休息和长休息的时间安排,让时间管理变得轻松高效。

本文将从应用架构设计、鸿蒙核心技术实现、AI应用亮点等维度,深度剖析这款应用的开发全流程。


在这里插入图片描述

二、应用架构设计:Model-Service-Page 三层架构

2.1 架构概览

┌─────────────────────────────────────────────────────────┐
│                     Page 层 (UI)                         │
│             PomodoroPlanPage.ets                         │
│   @State 动态生成 / TimePicker / ForEach 时间轴        │
├─────────────────────────────────────────────────────────┤
│                   Service 层 (业务逻辑)                  │
│            PomodoroPlanService.ets                       │
│   时间块计算 / 长短休息算法 / 时间格式化               │
├─────────────────────────────────────────────────────────┤
│                    Model 层 (数据模型)                   │
│            PomodoroPlanModel.ets                         │
│   TimeBlock / PomodoroData / PPMMessage / 常量         │
└─────────────────────────────────────────────────────────┘

2.2 Model 层:数据结构定义

核心数据类

  • TimeBlock:单个时间块,包含类型(focus/short_break/long_break)、开始时间、结束时间和标签
  • PomodoroData:完整时间块序列的聚合

关键常量

  • PPM_FOCUS_DURATIONS:4种专注时长(15/25/30/45分钟)

2.3 Service 层:时间计算算法

Service 层实现了番茄钟的核心时间计算逻辑:

getPomodoro(taskCount: number, focusMin: number, startTime: string): PomodoroData {
    const shortBreak = focusMin >= 45 ? 10 : 5
    const longBreak = focusMin >= 45 ? 20 : 15
    const blocks: TimeBlock[] = []
    let currentMin = parseTime(startTime)
    
    for (let i = 0; i < taskCount; i++) {
        // 添加专注块
        blocks.push(new TimeBlock('focus', focusStart, focusEnd, '专注任务 ${i+1}'))
        // 添加休息块(最后一项后不添加)
        if (i < taskCount - 1) {
            const isLongBreak = (i + 1) % 4 === 0
            // 短休息或长休息
        }
    }
    return new PomodoroData(blocks)
}

2.4 Page 层:UI展示

Page 层实现了任务数选择、专注时长选择、开始时间输入等交互,以及时间块序列的时间轴式展示。


三、鸿蒙技术深度解析

3.1 @State 动态生成时间块

本应用的核心状态管理围绕任务数量、专注时长和开始时间展开:

@State selectedTaskCount: number = 4       // 任务数量
@State selectedFocusMin: string = '25'      // 专注时长
@State selectedStartTime: string = '09:00'  // 开始时间
@State currentData: PomodoroData | null = null  // 生成的时间块序列

动态生成流程

  1. 用户选择任务数量、专注时长和开始时间
  2. 点击"生成番茄钟计划"按钮
  3. Service 层根据三个参数计算出完整的时间块序列
  4. 结果通过 @State 驱动 UI 渲染
private onGenerate(): void {
    this.isLoading = true
    this.currentData = null
    setTimeout(() => {
        const data = this.service.getPomodoro(this.selectedTaskCount,
            parseInt(this.selectedFocusMin), this.selectedStartTime)
        this.currentData = data
        this.isLoading = false
    }, 1500)
}

3.2 TimePicker 时间选择器(TextInput 实现)

本应用使用 TextInput 组件让用户输入开始时间,配合占位符提示格式:

TextInput({ text: this.selectedStartTime, placeholder: '输入开始时间,如 09:00' })
    .fontSize(16)
    .fontColor(COLOR_TEXT)
    .placeholderColor(COLOR_TEXT_SEC)
    .backgroundColor(COLOR_CARD)
    .borderRadius(12)
    .border({ width: 1, color: COLOR_BORDER })
    .padding(12)
    .margin({ left: 16, right: 16, top: 4, bottom: 8 })
    .onChange((val: string) => { this.selectedStartTime = val })

设计要点

  • 占位符提示输入格式 “09:00”,降低用户输入成本
  • 圆角边框 + 白色背景,与整体设计风格统一
  • 实时响应输入变化,支持任意时间输入

3.3 ForEach 时间轴列表

生成的时间块序列使用 ForEach 循环渲染为时间轴样式:

ForEach(data.blocks, (block: TimeBlock, idx: number) => {
    Row() {
        Column() {
            if (block.type === 'focus') {
                Text('🍅')  // 专注图标
            } else if (block.type === 'long_break') {
                Text('☕')  // 长休息图标
            } else {
                Text('💧')  // 短休息图标
            }
        }
        .backgroundColor(block.type === 'focus' ? COLOR_SELECTED_BG : '#F0FDF4')
        
        Column() {
            Text(block.label)
                .fontWeight(FontWeight.Bold)
            Text('${block.start} - ${block.end}')
                .fontColor(COLOR_TEXT_SEC)
        }
    }
    // 卡片样式
})

时间轴设计的亮点

  • 不同类型的块使用不同的图标和背景色(专注=🍅红色背景、休息=💧绿色背景)
  • 时间范围清晰显示开始和结束时间
  • 标签文字说明当前块的功能

3.4 时间计算

Service 层的时间计算涉及时分的精确运算:

// 时间解析:将 "09:00" 转换为分钟数
const parseTime = (t: string): number => {
    const parts = t.split(':')
    return parseInt(parts[0]) * 60 + parseInt(parts[1])
}

// 时间格式化:将分钟数转换为 "HH:MM" 格式
const formatTime = (mins: number): string => {
    const h = Math.floor(mins / 60) % 24
    const m = mins % 60
    const hh = h < 10 ? '0' + h : h.toString()
    const mm = m < 10 ? '0' + m : m.toString()
    return '${hh}:${mm}'
}

关键考虑

  • % 24 处理跨天的情况(如开始时间为23:00,专注结束后可能进入第二天)
  • 补零处理确保时间格式统一

四、AI 应用亮点分析

4.1 自动插入短休息

番茄工作法的核心在于"专注+休息"的交替循环。本应用自动在每个专注块之后插入短休息:

// 短休息时长根据专注时长动态调整
const shortBreak = focusMin >= 45 ? 10 : 5

休息策略

  • 专注时长 < 45分钟:短休息5分钟
  • 专注时长 ≥ 45分钟:短休息10分钟(因为更长的专注需要更长的恢复时间)

4.2 每4个专注块后长休息

根据经典的番茄工作法原则,每完成4个专注块后插入一个长休息:

const isLongBreak = (i + 1) % 4 === 0
const breakLen = isLongBreak ? longBreak : shortBreak

长休息策略

  • 专注时长 < 45分钟:长休息15分钟
  • 专注时长 ≥ 45分钟:长休息20分钟

4.3 时间块自动计算

系统自动计算每个时间块的精确时间范围,无需用户手动计算:

输入:任务数=4, 专注时长=25min, 开始时间=09:00
输出:
  09:00 - 09:25  🍅 专注任务 1
  09:25 - 09:30  💧 短休息 5分钟
  09:30 - 09:55  🍅 专注任务 2
  09:55 - 10:00  💧 短休息 5分钟
  10:00 - 10:25  🍅 专注任务 3
  10:25 - 10:30  💧 短休息 5分钟
  10:30 - 10:55  🍅 专注任务 4
  10:55 - 11:10  ☕ 长休息 15分钟

4.4 自定义开始时间

用户可以根据自己的作息习惯自由设置开始时间,系统会基于此时间自动计算后续所有时间块。这使得应用可以灵活适配不同的使用场景——无论是早上9点开始工作,还是下午2点开始学习。


五、关键技术挑战与解决方案

5.1 挑战一:精确的时间块计算

挑战:需要根据开始时间、专注时长和任务数量,精确计算出每个时间块的起止时间。

解决方案

  • 将所有时间统一转换为分钟数进行计算
  • 使用 currentMin 变量累计时间增量
  • 每次计算后立即格式化输出,避免累积误差
  • 处理跨天情况(% 24

5.2 挑战二:长短休息的自动判断

挑战:需要根据任务序号判断是否应该插入长休息,同时考虑专注时长对休息时长的影响。

解决方案

  • 使用 (i + 1) % 4 === 0 判断是否到达长休息时机
  • 专注时长 ≥ 45分钟时,自动增加休息时长50%
  • 最后一项任务后不添加休息块

5.3 挑战三:时间块序列的视觉呈现

挑战:需要将时间块序列以清晰、直观的方式展示给用户。

解决方案

  • 使用时间轴样式的垂直列表
  • 不同类型的块使用不同的图标和颜色区分
  • 每块独立成卡,包含标签和时间范围

六、用户交互体验设计

6.1 红色的番茄主题

应用采用红色系配色(#FEF2F2背景、#EF4444主题色),呼应番茄钟的经典红色意象:

const COLOR_BG = '#FEF2F2'
const COLOR_PRIMARY = '#EF4444'
const COLOR_SELECTED_BG = '#FEE2E2'

6.2 清晰的三步配置

应用的配置流程清晰明了:

  1. 选择任务数量:通过 Slider 步进选择(1-10个)
  2. 选择专注时长:点击胶囊选择4种时长之一
  3. 设置开始时间:输入具体时间

6.3 时间轴式结果展示

结果展示采用时间轴设计,每个时间块包含:

  • 图标(🍅专注/💧短休息/☕长休息)
  • 标签(“专注任务1”、"短休息5分钟"等)
  • 时间范围(“09:00 - 09:25”)

七、总结

番茄钟规划 应用展示了鸿蒙 ArkTS 在时间管理领域的应用潜力,三个核心技术亮点值得关注:

  1. 时间块动态生成:通过 Service 层的算法自动计算时间块序列
  2. 长短休息智能判断:基于经典番茄工作法原则自动插入短休息和长休息
  3. 时间轴式 UI 展示:使用 ForEach 将时间块序列渲染为直观的时间轴列表

未来展望:未来可以添加番茄钟计时器功能(实时倒计时)、任务管理功能(关联具体任务)、统计报告(专注时长统计)、提醒通知等功能,打造完整的番茄工作法工具套件。

Logo

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

更多推荐