news 2026/7/19 13:59:13

及时做APP开发实战(十六)-专注完成弹窗提示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
及时做APP开发实战(十六)-专注完成弹窗提示

及时做APP开发实战(十六)-专注完成弹窗提示

本文将介绍如何实现专注完成和休息结束的弹窗提示功能,提升用户体验。

一、功能需求

1.1 需求分析

【图1:专注完成弹窗】

┌─────────────────────────────────────┐ │ 🍅 专注完成 │ ├─────────────────────────────────────┤ │ │ │ 太棒了!你完成了一个番茄钟!🎉 │ │ │ │ 本次专注:25分钟 │ │ 累计专注:50分钟 │ │ │ │ ┌─────────┐ ┌─────────┐ │ │ │开始休息 │ │ 关闭 │ │ │ └─────────┘ └─────────┘ │ └─────────────────────────────────────┘

1.2 功能点

功能说明
专注完成弹窗显示鼓励语、本次时长、累计时长
休息结束弹窗提示用户开始新的专注
随机鼓励语多条鼓励语随机显示
操作按钮开始休息/开始专注/关闭

二、AlertDialog详解

2.1 基本用法

【图2:休息结束弹窗】

AlertDialog.show({title:'标题',message:'内容',autoCancel:true,// 点击遮罩关闭alignment:DialogAlignment.Center,// 对齐方式primaryButton:{// 主按钮value:'按钮1',action:()=>{// 点击事件}},secondaryButton:{// 副按钮value:'按钮2',action:()=>{// 点击事件}},cancel:()=>{// 取消回调// 关闭事件}});

2.2 参数说明

参数类型说明
titlestring弹窗标题
messagestring弹窗内容
autoCancelboolean点击遮罩是否关闭
alignmentDialogAlignment对齐方式
primaryButtonButton主按钮(右侧)
secondaryButtonButton副按钮(左侧)
cancel() => void取消回调

2.3 对齐方式

DialogAlignment枚举: ┌─────────────────────────────────────┐ │ Top - 顶部对齐 │ │ Center - 居中对齐(默认) │ │ Bottom - 底部对齐 │ │ TopStart - 左上对齐 │ │ TopEnd - 右上对齐 │ │ CenterStart - 左中对齐 │ │ CenterEnd - 右中对齐 │ │ BottomStart - 左下对齐 │ │ BottomEnd - 右下对齐 │ └─────────────────────────────────────┘

三、实现方案

3.1 专注完成弹窗

// 显示专注完成弹窗privateshowPomodoroCompleteDialog(){// 鼓励语数组constmessages=['太棒了!你完成了一个番茄钟!🎉','做得好!保持专注,继续加油!💪','专注完成!休息一下吧~ ☕','又一个番茄钟完成!你真厉害!🌟','专注力满分!给自己点个赞!👍'];// 随机选择一条constrandomMessage=messages[Math.floor(Math.random()*messages.length)];AlertDialog.show({title:'🍅 专注完成',message:randomMessage+`\n\n本次专注:${this.customDuration}分钟\n累计专注:${this.totalFocusMinutes}分钟`,autoCancel:true,alignment:DialogAlignment.Center,primaryButton:{value:'开始休息',action:()=>{this.startBreak();}},secondaryButton:{value:'关闭',action:()=>{}}});}

3.2 休息结束弹窗

// 显示休息结束弹窗privateshowBreakEndDialog(){constmessages=['休息结束,准备好继续了吗?','充电完成!让我们继续加油!','休息好了吗?开始新的专注吧!','准备好迎接下一个挑战了吗?'];constrandomMessage=messages[Math.floor(Math.random()*messages.length)];AlertDialog.show({title:'☕ 休息结束',message:randomMessage,autoCancel:true,alignment:DialogAlignment.Center,primaryButton:{value:'开始专注',action:()=>{this.timeLeft=this.customDuration*60;}},secondaryButton:{value:'稍后再说',action:()=>{}}});}

3.3 开始休息方法

// 开始休息privatestartBreak(){this.isBreak=true;// 判断是否需要长休息if(this.pomodoroCount%Constants.POMODOROS_BEFORE_LONG_BREAK===0){this.timeLeft=Constants.LONG_BREAK_DURATION*60;}else{this.timeLeft=Constants.SHORT_BREAK_DURATION*60;}}

四、调用时机

4.1 番茄钟完成时

// 计时结束处理privateasynchandleTimerEnd(){if(this.isBreak){// 休息结束this.feedbackUtil.breakEnd();this.showBreakEndDialog();// ✅ 显示弹窗}else{// 番茄钟完成this.pomodoroCount++;// 保存记录...// 番茄钟完成反馈this.feedbackUtil.pomodoroComplete();// 显示专注完成弹窗this.showPomodoroCompleteDialog();// ✅ 显示弹窗}}

4.2 流程图

┌─────────────────────────────────────┐ │ 专注流程 │ ├─────────────────────────────────────┤ │ 1. 用户开始专注 │ │ ↓ │ │ 2. 倒计时结束 │ │ ↓ │ │ 3. 显示专注完成弹窗 │ │ ├─→ 点击"开始休息" → 开始休息倒计时 │ │ └─→ 点击"关闭" → 等待用户操作 │ │ ↓ │ │ 4. 休息倒计时结束 │ │ ↓ │ │ 5. 显示休息结束弹窗 │ │ ├─→ 点击"开始专注" → 开始新番茄钟 │ │ └─→ 点击"稍后再说" → 等待用户操作 │ └─────────────────────────────────────┘

五、用户体验优化

5.1 鼓励语设计

专注完成鼓励语: ┌─────────────────────────────────────┐ │ 🎉 太棒了!你完成了一个番茄钟! │ │ 💪 做得好!保持专注,继续加油! │ │ ☕ 专注完成!休息一下吧~ │ │ 🌟 又一个番茄钟完成!你真厉害! │ │ 👍 专注力满分!给自己点个赞! │ └─────────────────────────────────────┘ 休息结束提示语: ┌─────────────────────────────────────┐ │ 休息结束,准备好继续了吗? │ │ 充电完成!让我们继续加油! │ │ 休息好了吗?开始新的专注吧! │ │ 准备好迎接下一个挑战了吗? │ └─────────────────────────────────────┘

5.2 数据统计展示

// 弹窗内容包含统计数据message:randomMessage+`本次专注:${this.customDuration}分钟 累计专注:${this.totalFocusMinutes}分钟`

5.3 交互优化

┌─────────────────────────────────────┐ │ 交互优化 │ ├─────────────────────────────────────┤ │ □ autoCancel: true - 点击遮罩关闭 │ │ □ 主按钮突出显示 - 引导用户操作 │ │ □ 副按钮次要显示 - 提供退出选项 │ │ □ 随机鼓励语 - 增加趣味性 │ └─────────────────────────────────────┘

六、完整代码示例

6.1 弹窗方法

// 显示专注完成弹窗privateshowPomodoroCompleteDialog(){constmessages=['太棒了!你完成了一个番茄钟!🎉','做得好!保持专注,继续加油!💪','专注完成!休息一下吧~ ☕','又一个番茄钟完成!你真厉害!🌟','专注力满分!给自己点个赞!👍'];constrandomMessage=messages[Math.floor(Math.random()*messages.length)];AlertDialog.show({title:'🍅 专注完成',message:randomMessage+`\n\n本次专注:${this.customDuration}分钟\n累计专注:${this.totalFocusMinutes}分钟`,autoCancel:true,alignment:DialogAlignment.Center,primaryButton:{value:'开始休息',action:()=>{this.startBreak();}},secondaryButton:{value:'关闭',action:()=>{}}});}// 显示休息结束弹窗privateshowBreakEndDialog(){constmessages=['休息结束,准备好继续了吗?','充电完成!让我们继续加油!','休息好了吗?开始新的专注吧!','准备好迎接下一个挑战了吗?'];constrandomMessage=messages[Math.floor(Math.random()*messages.length)];AlertDialog.show({title:'☕ 休息结束',message:randomMessage,autoCancel:true,alignment:DialogAlignment.Center,primaryButton:{value:'开始专注',action:()=>{this.timeLeft=this.customDuration*60;}},secondaryButton:{value:'稍后再说',action:()=>{}}});}

七、总结

本文实现了专注完成和休息结束的弹窗提示功能,核心要点:

  1. AlertDialog使用:标题、内容、按钮配置
  2. 随机鼓励语:增加趣味性和激励效果
  3. 数据统计:显示本次和累计专注时长
  4. 交互优化:主副按钮引导用户操作

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 13:58:07

BiliTools终极指南:如何高效免费下载B站视频和番剧资源

BiliTools终极指南:如何高效免费下载B站视频和番剧资源 【免费下载链接】BiliTools 本项目已停止维护。 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 你是否曾经遇到过这样的困扰:看到B站上精彩的视频教程、番剧或者UP主的独…

作者头像 李华
网站建设 2026/7/19 13:53:51

@PostMapping 注解中的 consumes 属性

PostMapping 注解中的 consumes 属性,用于指定该接口能够处理的请求的 Content-Type(媒体类型)。当客户端发来的请求头 Content-Type 不匹配时,服务器会返回 415 Unsupported Media Type 错误。你提到的 consumes "multipar…

作者头像 李华
网站建设 2026/7/19 13:53:13

HTTPotion源码解析:理解Elixir宏与模块设计的艺术

HTTPotion源码解析:理解Elixir宏与模块设计的艺术 【免费下载链接】httpotion [Deprecated because ibrowse is not maintained] HTTP client for Elixir (use Tesla please) 项目地址: https://gitcode.com/gh_mirrors/ht/httpotion HTTPotion是一款基于ibr…

作者头像 李华
网站建设 2026/7/19 13:48:20

从安装到实战:aiolimiter异步限流工具的完整使用指南

从安装到实战:aiolimiter异步限流工具的完整使用指南 【免费下载链接】aiolimiter An efficient implementation of a rate limiter for asyncio. 项目地址: https://gitcode.com/gh_mirrors/ai/aiolimiter 在当今的异步编程世界中,处理并发请求时…

作者头像 李华