Flutter for OpenHarmony 实战_喝水提醒应用数据持久化与定时任务 📅 发布时间:2026/7/8 7:26:51 👁️ 浏览次数: Flutter for OpenHarmony 实战喝水提醒应用数据持久化与定时任务文章目录Flutter for OpenHarmony 实战喝水提醒应用数据持久化与定时任务前言一、数据持久化系统1.1 SharedPreferences集成1.2 数据保存1.3 数据加载二、定时提醒系统2.1 Timer.periodic使用2.2 提醒显示2.3 定时器管理三、饮水记录管理3.1 记录数据结构3.2 添加记录3.3 记录显示四、UI界面设计4.1 进度显示4.2 快捷按钮4.3 统计信息五、状态管理5.1 状态变量5.2 setState更新六、用户体验优化6.1 即时反馈6.2 持久化保证6.3 友好提示总结欢迎加入开源鸿蒙跨平台社区 开源鸿蒙跨平台开发者社区前言喝水提醒应用的核心功能是帮助用户养成良好的饮水习惯其中数据持久化和定时提醒是两个关键技术点。本文将详细介绍如何使用SharedPreferences实现数据存储如何使用Timer.periodic实现定时提醒以及如何设计直观的UI界面。一、数据持久化系统1.1 SharedPreferences集成首先在pubspec.yaml中添加依赖dependencies:shared_preferences:^2.0.15然后导入并在应用中使用importpackage:shared_preferences/shared_preferences.dart;1.2 数据保存Futurevoid_saveData()async{finalprefsawaitSharedPreferences.getInstance();awaitprefs.setInt(current_water,_currentWater);finalrecordsJson_records.map((record){return${record.amount}|${record.timestamp.toIso8601String()};}).toList();awaitprefs.setStringList(water_records,recordsJson);}将当前饮水量和历史记录保存到本地存储。饮水量使用整数存储记录列表转换为字符串列表存储每条记录格式为数量|时间戳。1.3 数据加载Futurevoid_loadData()async{finalprefsawaitSharedPreferences.getInstance();setState((){_currentWaterprefs.getInt(current_water)??0;finalrecordsJsonprefs.getStringList(water_records);if(recordsJson!null){_recordsrecordsJson.map((json){finalpartsjson.split(|);returnWaterRecord(amount:int.parse(parts[0]),timestamp:DateTime.parse(parts[1]),);}).toList();}});}从本地存储加载数据恢复应用状态。使用??提供默认值确保首次运行时不会出错。二、定时提醒系统2.1 Timer.periodic使用Timer?reminderTimer;void_startReminder(){reminderTimer?.cancel();reminderTimerTimer.periodic(constDuration(minutes:30),(timer){_showReminder();});}每30分钟触发一次提醒。使用Timer.periodic创建周期性任务返回的Timer对象可以用于取消任务。2.2 提醒显示void_showReminder(){if(mounted){ScaffoldMessenger.of(context).showSnackBar(constSnackBar(content:Text(该喝水了),duration:Duration(seconds:3),),);}}使用SnackBar显示提醒信息。mounted检查确保组件仍然挂载避免在组件销毁后显示错误。2.3 定时器管理overridevoiddispose(){reminderTimer?.cancel();super.dispose();}组件销毁时取消定时器防止内存泄漏。三、饮水记录管理3.1 记录数据结构classWaterRecord{finalint amount;finalDateTimetimestamp;WaterRecord({requiredthis.amount,requiredthis.timestamp});}每条记录包含饮水量和时间戳。3.2 添加记录void_addWater(int amount){setState((){_currentWateramount;_records.add(WaterRecord(amount:amount,timestamp:DateTime.now(),));});_saveData();}增加饮水量添加记录并保存到本地存储。3.3 记录显示ListView.builder(itemCount:_records.length,itemBuilder:(context,index){finalrecord_records[index];finalhoursDateTime.now().difference(record.timestamp).inHours;returnListTile(title:Text(${record.amount}ml),subtitle:Text(hours1?刚刚:$hours小时前喝过),);},)使用ListView显示历史记录根据时间差显示友好的时间描述。四、UI界面设计4.1 进度显示CircularProgressIndicator(value:_currentWater/_goal,strokeWidth:10,backgroundColor:Colors.grey.shade200,)使用环形进度条显示当前进度目标为2000ml。4.2 快捷按钮Row(mainAxisAlignment:MainAxisAlignment.spaceEvenly,children:[ElevatedButton(onPressed:()_addWater(200),child:constText(200ml),),ElevatedButton(onPressed:()_addWater(500),child:constText(500ml),),],)提供200ml和500ml两个常用选项方便快速记录。4.3 统计信息Text(今日已喝:$_currentWaterml/$_goalml,style:constTextStyle(fontSize:18,fontWeight:FontWeight.bold),)显示当前饮水量和目标让用户清晰了解进度。五、状态管理5.1 状态变量int _currentWater0;finalint _goal2000;ListWaterRecord_records[];使用简单的状态变量管理应用状态。5.2 setState更新setState((){_currentWateramount;});使用setState触发UI更新这是Flutter中最基本的状态管理方式。六、用户体验优化6.1 即时反馈每次添加饮水后立即更新UI并保存数据给用户即时反馈。6.2 持久化保证每次状态变化都保存到本地确保应用重启后数据不丢失。6.3 友好提示使用SnackBar而不是AlertDialog提醒不会打断用户当前操作。总结本文详细介绍了喝水提醒应用的数据持久化和定时提醒系统。从SharedPreferences的使用到Timer.periodic的应用从数据结构设计到UI界面实现每个技术点都直接影响应用的功能性和用户体验。通过这些技术的综合应用实现了功能完整且实用的喝水提醒应用。
银行系统中大文件上传解决方案中如何加入文件夹断点续传? 大文件上传解决方案 作为一个同样接外包接到手软的.NET老油条,我完全理解你既要兼容IE8又要20G文件上传还要100块预算的"无理要求"。来,给你整一套"饿不死套餐"! 前端实现 - 兼容IE8的土味方案 穷逼版大文件上传/* 祖传… 2026/5/17 3:37:12
大模型实习模拟面试:多智能体系统评估体系深度解析——从Anthropic实践到AI工程化思维 大模型实习模拟面试:多智能体系统评估体系深度解析——从Anthropic实践到AI工程化思维 关键词:多智能体评估、大模型实习、AI可靠性、AI工程化、Anthropic、单元测试失效、Agent评测 随着大模型从“单打独斗”走向“协同作战”,多智能体系统&… 2026/7/6 5:44:47
科技成果转化的创新引擎:构建区域协同发展的新生态 在当今这个创新驱动的时代,科技成果转化已然成为推动区域经济高质量发展的重要引擎。然而,在这一过程中,我们不得不正视一些现实问题:科技成果供需信息不对称、转化渠道不畅、专业化服务能力不足等问题,这些问题如同一… 2026/7/5 8:27:44
AltDrag终极指南:一键改变Windows窗口操作方式的革命性工具 AltDrag终极指南:一键改变Windows窗口操作方式的革命性工具 【免费下载链接】altdrag :file_folder: Easily drag windows when pressing the alt key. (Windows) 项目地址: https://gitcode.com/gh_mirrors/al/altdrag 你是否厌倦了每次都要精确点击窗口标题… 2026/7/8 7:23:22
5步实现游戏修改器功能增强:开源本地化解决方案深度解析 5步实现游戏修改器功能增强:开源本地化解决方案深度解析 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款针对Wand&#… 2026/7/8 7:21:21
paperxie|告别盲目改文!AI分层降重降AIGC,适配全高校检测规则 paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图降重复率 - PaperXie智能写作PaperXie免费论文查重检测-首款免费论文检测软件,为毕业生提供专业的论文重复率检测、论文降重、Aigc检测、智能排版 、论文写作等一站式服务。https://www.paperxie.c… 2026/7/8 7:17:21
天龙八部单机版GM工具:3分钟快速上手,轻松管理游戏数据 天龙八部单机版GM工具:3分钟快速上手,轻松管理游戏数据 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 还在为《天龙八部》单机版游戏数据管理而烦恼吗?天龙八部单… 2026/7/8 7:17:21
HoloOcean 2.0 声纳仿真升级:基于光线追踪的实时多路径噪声建模与性能对比 HoloOcean 2.0 声纳仿真升级:基于光线追踪的实时多路径噪声建模与性能对比1. 水下机器人仿真的技术演进水下机器人技术的快速发展对仿真工具提出了更高要求。传统声纳仿真方法面临计算效率与真实感难以兼顾的困境——八叉树结构虽能快速处理静态环境,却难… 2026/7/8 7:17:21
终极指南:如何永久免费使用Internet Download Manager(IDM激活脚本详解) 终极指南:如何永久免费使用Internet Download Manager(IDM激活脚本详解) 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在… 2026/7/8 7:13:02
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58