当前位置: 首页 > article >正文

【maaath】Flutter for OpenHarmony 体重管理应用开发实战

Flutter for OpenHarmony 体重管理应用开发实战从数据模型到完整功能实现欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net作者maaath一、前言随着 OpenHarmony 生态的快速发展Flutter for OpenHarmony 跨平台框架为开发者提供了一种高效构建鸿蒙应用的新途径。本文将带领读者从零到一构建一个功能完整的体重管理应用涵盖体重记录追踪、BMI 指数计算、体脂率记录、目标体重设置、体重变化图表、饮食运动关联、健康建议推送以及数据分享等八大核心功能。本文所有代码均已在鸿蒙设备上验证通过读者可参照文章步骤进行实践。完整项目源码已托管在 AtomGit 平台欢迎访问 https://atomgit.com 获取完整代码。二、应用架构设计体重管理应用采用经典的三层架构Model数据模型层、Service业务逻辑层和PageUI展示层。这种架构的优势在于职责清晰、易于维护和扩展。2.1 数据模型层数据模型是整个应用的基石。我们定义了WeightRecord、BmiResult、BodyFatRecord、WeightGoal、DietRecord、ExerciseRecord、HealthAdvice等多个模型类覆盖了体重管理的各个维度。以核心的体重记录模型为例classWeightRecord{finalStringid;finalDateTimerecordTime;finaldouble weight;finaldouble?bodyFatRate;finaldouble?bmi;finalString?note;finalString?mood;WeightRecord({requiredthis.id,requiredthis.recordTime,requiredthis.weight,this.bodyFatRate,this.bmi,this.note,this.mood,});}该模型包含了记录的唯一标识、记录时间、体重值、体脂率、BMI 指数、备注和心情等字段。其中体脂率、备注和心情为可选字段增加了数据录入的灵活性。2.2 业务逻辑层Service 层采用单例模式设计集中管理所有业务数据和逻辑。以 BMI 计算为例我们实现了完整的计算逻辑和健康建议生成BmiResultcalculateBmi(double weight,double height){finalbmidouble.parse((weight/(height*height)).toStringAsFixed(1));Stringcategory;Colorcolor;Stringdescription;ListStringsuggestions;if(bmi18.5){category偏瘦;colorColors.blue;description您的体重偏低建议适当增加营养摄入增强体质。;suggestions[增加蛋白质摄入,适当增加健康脂肪,进行力量训练增肌,保证充足睡眠];}elseif(bmi24){category正常;colorColors.green;description您的体重在正常范围内请继续保持健康的生活方式。;suggestions[保持均衡饮食,坚持规律运动,定期监测体重,保持良好作息];}elseif(bmi28){category超重;colorColors.orange;description您的体重略高于正常范围建议通过饮食和运动进行调整。;suggestions[控制每日热量摄入,增加有氧运动,减少高糖高脂食物,每周减重0.5-1kg];}else{category肥胖;colorColors.red;description您的体重明显超标建议制定科学的减重计划必要时咨询医生。;suggestions[咨询专业医生,制定科学减重计划,严格控制饮食,坚持每日运动];}finalhealthyMindouble.parse((18.5*height*height).toStringAsFixed(1));finalhealthyMaxdouble.parse((24*height*height).toStringAsFixed(1));returnBmiResult(bmi:bmi,category:category,categoryColor:color,description:description,healthyWeightMin:healthyMin,healthyWeightMax:healthyMax,suggestions:suggestions,);}这段代码根据世界卫生组织的 BMI 标准将结果分为偏瘦、正常、超重和肥胖四个等级并为每个等级提供针对性的健康建议。同时还会计算出健康的体重范围帮助用户明确目标。三、核心功能实现3.1 体重记录与追踪体重记录页面是用户最常使用的功能。我们设计了直观的输入界面支持体重、体脂率、心情、备注等多维度数据录入Widget_buildWeightInput(){returnContainer(padding:constEdgeInsets.all(20),decoration:BoxDecoration(color:Colors.white,borderRadius:BorderRadius.circular(16),boxShadow:[BoxShadow(color:Colors.grey.withValues(alpha:0.1),blurRadius:8,offset:constOffset(0,2))],),child:Column(children:[constIcon(Icons.monitor_weight,size:48,color:Color(0xFF4CAF50)),constSizedBox(height:12),constText(请输入当前体重,style:TextStyle(fontSize:16,fontWeight:FontWeight.w500)),constSizedBox(height:16),Row(mainAxisAlignment:MainAxisAlignment.center,crossAxisAlignment:CrossAxisAlignment.end,children:[SizedBox(width:120,child:TextField(controller:_weightController,keyboardType:constTextInputType.numberWithOptions(decimal:true),textAlign:TextAlign.center,style:constTextStyle(fontSize:36,fontWeight:FontWeight.bold,color:Color(0xFF4CAF50)),decoration:constInputDecoration(hintText:0.0,border:InputBorder.none,),),),constPadding(padding:EdgeInsets.only(bottom:8),child:Text(kg,style:TextStyle(fontSize:20,color:Colors.grey)),),],),],),);}体重输入采用大号字体居中显示配合 kg 单位后缀视觉上清晰直观。用户还可以选择心情表情和添加备注让每次记录都更有温度。3.2 体重变化图表图表功能使用 Flutter 的 CustomPaint 组件实现无需引入第三方图表库即可绘制出专业的趋势图class_WeightChartPainterextendsCustomPainter{finalListWeightRecordrecords;finalStringchartType;overridevoidpaint(Canvascanvas,Sizesize){// 计算图表区域finalleftPadding50.0;finalrightPadding16.0;finaltopPadding16.0;finalbottomPadding40.0;finalchartWidthsize.width-leftPadding-rightPadding;finalchartHeightsize.height-topPadding-bottomPadding;// 绘制网格线for(int i0;i4;i){finalytopPaddingchartHeight*i/4;canvas.drawLine(Offset(leftPadding,y),Offset(size.width-rightPadding,y),gridPaint,);}// 绘制折线和填充区域finalpathPath();for(int i0;irecords.length;i){finalvalrecords[i].weight;finalxleftPadding(chartWidth*i/(records.length-1).clamp(1,999999));finalytopPaddingchartHeight*(1-(val-adjustedMin)/adjustedRange);if(i0){path.moveTo(x,y);}else{path.lineTo(x,y);}}// 绘制渐变填充区域canvas.drawPath(fillPath,paint);canvas.drawPath(path,linePaint);}}CustomPaint 的优势在于完全可控的绘制逻辑和极小的包体积。我们实现了带渐变填充的折线图并支持体重、BMI、体脂率三种数据切换查看同时提供 7 天、14 天、30 天、90 天四种时间范围选择。3.3 饮食运动关联饮食运动管理页面采用 TabBar 布局分为今日概览、饮食记录和运动记录三个标签页。今日概览页面展示热量摄入与消耗的对比Widget_buildTodayCalorieCard(DailySummarysummary){finalremaining2000-summary.totalCaloriesIn;returnContainer(padding:constEdgeInsets.all(20),decoration:BoxDecoration(gradient:LinearGradient(colors:[constColor(0xFF00BCD4),constColor(0xFF26C6DA)],begin:Alignment.topLeft,end:Alignment.bottomRight,),borderRadius:BorderRadius.circular(20),),child:Column(children:[constText(今日热量,style:TextStyle(color:Colors.white70,fontSize:14)),constSizedBox(height:8),Row(mainAxisAlignment:MainAxisAlignment.spaceAround,children:[_buildCalorieItem(摄入,summary.totalCaloriesIn,Icons.restaurant,Colors.orange.shade200),_buildCalorieItem(消耗,summary.totalCaloriesOut,Icons.directions_run,Colors.green.shade200),_buildCalorieItem(剩余,remaining0?remaining:0.0,Icons.check_circle,Colors.white),],),constSizedBox(height:16),ClipRRect(borderRadius:BorderRadius.circular(6),child:LinearProgressIndicator(value:(summary.totalCaloriesIn/2000).clamp(0.0,1.0),minHeight:8,backgroundColor:Colors.white.withValues(alpha:0.3),valueColor:AlwaysStoppedAnimationColor(summary.totalCaloriesIn2000?Colors.red.shade300:Colors.white,),),),],),);}热量进度条直观地展示了当日摄入量占推荐值的比例当摄入超标时进度条会变为红色起到警示作用。用户还可以在饮食和运动标签页中手动添加记录系统会自动汇总到今日概览中。3.4 健康建议推送健康建议模块内置了 10 条专业建议涵盖饮食建议、运动建议和生活习惯三大类别。每条建议都包含详细的说明和可操作的小贴士void_initAdvices(){_advices.addAll([HealthAdvice(id:AD001,title:保持每日饮水充足,content:每天饮用1.5-2升水有助于新陈代谢促进脂肪燃烧。建议晨起空腹喝一杯温水餐前半小时饮水有助于控制食量。,category:饮食建议,priority:1,tips:[晨起一杯温水,餐前半小时饮水,运动后及时补水,避免含糖饮料],icon:Icons.water_drop,),// ... 更多建议]);}建议按照优先级排序用户可以通过顶部的分类筛选器按类别查看。每条建议以可展开的卡片形式呈现点击后可以查看详细的小贴士列表。3.5 数据分享功能数据分享功能允许用户选择时间范围生成体重管理报告。报告包含起始体重、结束体重、体重变化、平均 BMI、平均体脂率、运动天数、总消耗热量等关键指标ShareReportgenerateShareReport({DateTime?startDate,DateTime?endDate}){// 筛选时间范围内的记录finalperiodRecords_records.where((r)r.recordTime.isAfter(start)r.recordTime.isBefore(end.add(constDuration(days:1)))).toList();// 计算各项指标finalstartWperiodRecords.isNotEmpty?periodRecords.first.weight:0.0;finalendWperiodRecords.isNotEmpty?periodRecords.last.weight:0.0;finalavgBmiperiodRecords.where((r)r.bmi!null).folddouble(0,(s,r)sr.bmi!)/periodRecords.length.clamp(1,999999);// 生成总结Stringsummary;finalchangeendW-startW;if(change-1){summary恭喜在此期间成功减重${change.abs().toStringAsFixed(1)}kg继续保持健康的生活方式;}elseif(change1){summary在此期间体重增加了${change.toStringAsFixed(1)}kg建议关注饮食和运动习惯。;}else{summary在此期间体重基本保持稳定波动在正常范围内。;}// ...}报告生成后用户可以通过分享功能将报告发送给朋友或保存到本地方便与健身教练或医生交流。四、在鸿蒙设备上运行4.1 环境准备确保已安装 Flutter for OpenHarmony 开发环境具体安装步骤请参考官方文档。本项目使用 Flutter 框架通过 Flutter for OpenHarmony 适配层在鸿蒙设备上运行。4.2 运行截图以下是体重管理应用在鸿蒙设备上的运行效果截图主仪表盘页面主仪表盘展示了当前体重、BMI、体脂率三大核心指标以及近 7 天体重变化趋势。下方提供了目标进度条、今日热量概览和功能入口网格。BMI 计算页面输入身高体重后自动计算 BMI 指数显示所属类别和健康体重范围并提供针对性的健康建议。体重变化图表支持体重、BMI、体脂率三种数据切换可选择 7/14/30/90 天时间范围底部显示统计摘要。饮食运动管理三标签页设计今日概览展示热量摄入/消耗对比饮食和运动标签页支持记录添加和管理。健康建议10 条专业健康建议按饮食、运动、生活习惯分类可展开查看详细小贴士。数据分享报告选择时间范围生成体重管理报告包含各项关键指标和总结支持分享和保存。五、总结本文详细介绍了如何使用 Flutter for OpenHarmony 跨平台框架构建一个功能完整的体重管理应用。从数据模型设计到业务逻辑实现再到 UI 界面开发完整地展示了 Flutter 在鸿蒙平台上的开发流程。通过本文的实践读者可以掌握以下技能Flutter for OpenHarmony 项目的三层架构设计方法CustomPaint 自定义图表绘制技术单例模式 Service 层的设计与实现多 Tab 页面的状态管理数据报告生成与分享功能开发体重管理应用只是 Flutter for OpenHarmony 开发的一个示例开发者可以基于本文的架构和代码扩展出更多实用的健康管理功能如血压记录、血糖监测、睡眠分析等。完整项目源码已托管在 AtomGit 平台欢迎访问 https://atomgit.com 获取完整代码。如果你对 Flutter for OpenHarmony 开发感兴趣欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net交流讨论共同推动 Flutter for OpenHarmony 生态发展。感谢各位阅读和支持

相关文章:

【maaath】Flutter for OpenHarmony 体重管理应用开发实战

Flutter for OpenHarmony 体重管理应用开发实战:从数据模型到完整功能实现欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 作者:maaath一、前言 随着 OpenHarmony 生态的快速发展,Flutter for OpenHarmon…...

开源云原生安全态势感知平台:架构设计与实战部署指南

1. 项目概述:一个开源的云原生安全态势感知平台最近在梳理团队内部的安全监控体系时,发现了一个挺有意思的开源项目——piti/openclaw-security-dashboard。这名字直译过来是“皮提的开放之爪安全仪表盘”,听起来有点中二,但实际接…...

基于MCP协议为AI智能体赋予本地桌面自动化能力

1. 项目概述:为AI智能体赋予“手和眼”的桌面操作技能如果你正在使用像Cursor、Claude Code或Codex这类AI编程助手,可能会发现一个痛点:它们能帮你写代码、分析问题,但无法直接操作你的电脑。你想让它帮你打开一个软件、填写一个表…...

【Perplexity ACM论文查询终极指南】:20年科研老兵亲授3大隐藏技巧,90%研究者至今不知

更多请点击: https://intelliparadigm.com 第一章:Perplexity ACM论文查询的底层逻辑与认知重构 Perplexity 并非 ACM 官方检索系统,而是一种基于语言模型的智能代理式查询工具,其与 ACM Digital Library 的交互本质是语义驱动的…...

如何将Blender变成参数化CAD工具:CAD_Sketcher完整入门指南

如何将Blender变成参数化CAD工具:CAD_Sketcher完整入门指南 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher 你是否曾经希望在Blender中创建精确的工程图纸&#…...

基于LLM的GitHub智能助手:用自然语言驱动自动化工作流

1. 项目概述:当GitHub遇到AI,自动化工作流的新范式 最近在折腾一个挺有意思的开源项目,叫 MPK2004/github-agent 。乍一看名字,你可能会想,这又是一个基于GitHub API的机器人或者自动化脚本吧?没错&#…...

NotebookLM多语言支持到底行不行?基于2000+跨语言笔记片段的BLEU-4与BERTScore双维度评测(含原始数据集下载链接)

更多请点击: https://intelliparadigm.com 第一章:NotebookLM多语言支持到底行不行?基于2000跨语言笔记片段的BLEU-4与BERTScore双维度评测(含原始数据集下载链接) NotebookLM 官方宣称支持“30语言”,但其…...

AI工作流框架:用DAG与异步编排简化大模型应用开发

1. 项目概述:一个面向AI应用开发的现代工作流工具如果你最近在折腾AI应用开发,无论是想快速搭建一个智能客服,还是想集成大语言模型到你的产品里,大概率会遇到一个共同的烦恼:“想法很美好,落地很琐碎”。从…...

Cyclops:基于Helm的可视化Kubernetes部署平台实战指南

1. 项目概述:为什么我们需要一个“开发者友好”的Kubernetes界面?如果你和我一样,在云原生领域摸爬滚打了几年,那你一定对Kubernetes又爱又恨。爱的是它强大的编排能力和生态,恨的是那堆让人眼花缭乱的YAML文件。每次要…...

开源CRM Clawnify:轻量自托管,专为SaaS与AI Agent设计

1. 项目概述:一个为SaaS和AI Agent设计的开源CRM如果你正在为你的SaaS产品寻找一个轻量、可自托管、且能无缝嵌入的客户关系管理(CRM)模块,或者你厌倦了HubSpot、Salesforce这类重量级SaaS的复杂配置、高昂费用和API限制&#xff…...

【C++】C/C++ 内存管理从入门到进阶

【相关题目】 代码语言:javascript AI代码解释 int globalVar 1;static int staticGlobalVar 1;void Test(){static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";const char* pChar3 "abcd";int*…...

AI Agent编排实战:OPC v5.0如何实现多智能体协作与工程化任务管理

1. 项目概述:一人公司的AI CEO最近在折腾AI Agent编排,发现了一个挺有意思的项目,叫OPC(One-Person Company)。简单来说,它不是一个独立的AI应用,而是一个给OpenClaw这个AI智能体平台用的“技能…...

从零部署全能Discord机器人:模块化设计与实战优化指南

1. 项目概述:一个全能型Discord机器人的诞生最近在Discord社区里折腾一个叫“Big Boss Bot”的机器人,项目地址是kitakitsune0x/bigbossbot。这名字听起来就挺有气势的,对吧?它本质上是一个功能丰富的Discord机器人,旨…...

5分钟搞定B站视频备份:m4s-converter完整使用教程

5分钟搞定B站视频备份:m4s-converter完整使用教程 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过这样的情况&#xff1…...

AI智能体规划框架skill-daydreaming:让AI像人一样思考与执行复杂任务

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“skill-daydreaming”,作者是regiep4。光看这个名字,你可能觉得有点玄乎——“技能白日梦”?这到底是干嘛的?作为一个在AI和自动化工具领域折腾了十多年…...

VSCode连接Ubuntu虚拟机(VMware/VirtualBox)编辑文件,总提示Permission Denied?可能是这个共享文件夹权限问题

VSCode连接Ubuntu虚拟机编辑文件时Permission Denied的深度解决方案 跨平台开发已经成为现代开发者的标配工作流,而VSCode配合虚拟机更是常见的开发环境组合。但当你兴致勃勃地在Windows或macOS上通过VSCode连接到Ubuntu虚拟机,准备大展拳脚时&#xff0…...

PX4-Autopilot嵌入式系统实时监控与状态监测算法深度解析

PX4-Autopilot嵌入式系统实时监控与状态监测算法深度解析 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot作为开源无人机飞控系统的代表性项目,其状态监测算法在嵌入式系统…...

ReMe开源框架:突破AI智能体上下文限制与状态丢失的长期记忆管理方案

1. 项目概述与核心价值 如果你正在构建一个需要长期记忆的AI智能体,比如一个能记住你编程偏好的代码助手,或者一个能追踪用户历史问题的客服机器人,那么你肯定遇到过两个让人头疼的“顽疾”: 上下文窗口限制 和 会话状态丢失 …...

芯片良率提升:从设计到制造的系统性工程实践

1. 项目概述:从“能用”到“好用”的生死线“芯片良率”这四个字,对于圈外人来说,可能只是个模糊的技术指标。但对于身处半导体行业,无论是设计、制造、封测还是终端应用环节的从业者而言,它是一条贯穿始终、关乎生死存…...

数据科学协作新范式:构建可复现、可追溯的“小宇宙”项目

1. 项目概述:从“小宇宙”到数据科学协作的范式革新最近在GitHub上闲逛,发现了一个挺有意思的项目——datawhalechina/tiny-universe。乍一看这个名字,“小宇宙”,感觉有点玄乎,但点进去仔细研究后,发现它远…...

如何构建教育机构专属的离线编程教学平台:CodeCombat私有化部署实战

如何构建教育机构专属的离线编程教学平台:CodeCombat私有化部署实战 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 你是否曾面临这样的困境:当50名学生同时在线编程时&am…...

开源客户端工具设计:从API封装到健壮实现的工程实践

1. 项目概述:一个开源客户端工具的诞生与价值在开源世界里,我们经常会遇到一些功能强大但使用门槛较高的服务端项目。它们往往提供了核心的API或服务,但缺少一个能让普通用户或开发者快速上手、直观操作的“门面”。lotsoftick/openclaw_clie…...

5个理由告诉你为什么Karate是API测试自动化的终极解决方案

5个理由告诉你为什么Karate是API测试自动化的终极解决方案 【免费下载链接】karate Test Automation Made Simple 项目地址: https://gitcode.com/gh_mirrors/ka/karate Karate测试框架是一个革命性的开源工具,它将API测试、Mock服务、性能测试和UI自动化完美…...

利用 Taotoken 统一管理多个项目的 API 密钥与访问权限

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用 Taotoken 统一管理多个项目的 API 密钥与访问权限 在同时维护多个 AI 应用或为不同客户部署服务的场景中,管理不同…...

构建数字灵魂:从知识管理到AI智能体的个人数字资产管理指南

1. 项目概述与核心价值最近在整理个人知识库和开源项目时,我偶然发现了一个名为“awesome-digital-souls”的仓库,它来自开发者haowei-freesky。这个标题本身就充满了想象力——“数字灵魂”。乍一看,你可能会联想到科幻电影里关于意识上传、…...

ARM调试接口技术:SWD与JTAG协议切换机制详解

1. ARM调试接口技术深度解析 在嵌入式系统开发领域,调试接口如同工程师的"听诊器",是连接开发环境与目标芯片的重要通道。作为行业标准,ARM架构提供了两种主流的调试协议:串行线调试(SWD)和JTAG。这两种协议各有特点&am…...

基于AIGC的文本生成视频系统:从架构设计到工程实践

1. 项目概述:从文本到视频的自动化创作最近在折腾一个挺有意思的项目,叫“TextCreateVideo”,直译过来就是“文本生成视频”。这玩意儿听起来像是科幻电影里的概念,但现在已经有不少开源项目在尝试落地了。我关注的这个Anning01/T…...

VoLTE技术解析:4G语音实现原理与优化实践

1. VoLTE技术概述VoLTE(Voice over LTE)作为4G LTE网络上的语音解决方案,从根本上改变了传统移动语音的传输方式。这项技术将语音信号数字化为IP数据包,通过LTE网络的全IP架构进行传输,完全摆脱了2G/3G时代依赖的电路交…...

DPDK 教程(三):多队列 + RSS + 多 worker 的最小转发 / Echo

DPDK 教程(三):多队列 RSS 多 worker 的最小转发 / Echo 本文对应学习路径第三步:在理解 ethdev/mbuf/mempool 后,做一个最小可运行的转发或 echo 原型,刻意使用 多 RX 队列 RSS 把流量分散到 多个 work…...

【2026最新】英文论文降AIGC实测:拒绝盲目换词,工具盘点与3种手动修改方法

马上要临近答辩了,还有的同学在发愁英文摘要和全英文章怎么降低aigc率。英文文本的句式本来就很固定,比如大量的被动语态和从句,这就很容易被系统标记,尤其对于我们这种非英语母语者来说,更是无从下手。 今天我就结合…...