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

【maaath】 Flutter for OpenHarmony 饮水水质监测应用开发实战

Flutter for OpenHarmony 饮水水质监测应用开发实战欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net作者maaath一、引言随着人们对健康饮水的关注度日益提升水质监测已成为日常生活中不可或缺的一部分。无论是家庭自来水、办公室饮水机还是小区直饮水站了解水质状况对保障健康至关重要。本文基于 Flutter for OpenHarmony 跨平台框架从零构建一款功能完整的饮水水质监测应用。通过本文你将学习到如何在 Flutter for OpenHarmony 中设计复杂的数据模型如何使用 CustomPaint 自绘图表和地图如何实现多维度数据筛选、对比分析和报告导出如何将应用成功运行在鸿蒙设备上本文所有代码均已在鸿蒙设备上验证通过完整源码托管于 AtomGit 平台。二、应用功能概览饮水水质监测应用包含以下八大核心功能模块功能模块说明水质参数记录录入 pH、浊度、TDS、余氯、硬度、水温、大肠菌群等参数检测数据图表折线图展示参数变化趋势支持多参数切换和时间范围筛选水质达标提示对照国家标准逐项展示达标情况饮水安全建议分类展示饮水安全知识按优先级排序地点水质地图可视化展示各检测地点的水质评分检测历史管理按地点、状态筛选支持排序和删除水质对比分析双地点多参数横向对比报告导出分享生成检测报告并分享三、数据模型设计首先我们定义水质检测记录的数据模型。在 Flutter for OpenHarmony 中数据模型使用标准的 Dart 类定义即可无需任何平台特定代码。classWaterQualityRecord{finalStringid;finalStringlocationName;finaldouble latitude;finaldouble longitude;finalDateTimetestTime;finaldouble ph;finaldouble turbidity;finaldouble tds;finaldouble chlorine;finaldouble hardness;finaldouble temperature;finaldouble coliform;finalStringwaterSource;finalStringnotes;finalbool isCompliant;WaterQualityRecord({requiredthis.id,requiredthis.locationName,requiredthis.latitude,requiredthis.longitude,requiredthis.testTime,requiredthis.ph,requiredthis.turbidity,requiredthis.tds,requiredthis.chlorine,requiredthis.hardness,requiredthis.temperature,requiredthis.coliform,requiredthis.waterSource,this.notes,requiredthis.isCompliant,});}isCompliant字段用于标识该条记录是否达标其判断逻辑在服务层中根据国家标准动态计算。此外我们还定义了水质标准、地点水质、安全建议、对比结果和导出报告等模型共同构成完整的数据体系。四、服务层实现服务层采用单例模式与 Flutter for OpenHarmony 项目中的其他服务保持一致。核心功能包括数据初始化、记录管理、达标判断、对比分析和报告生成。classWaterQualityService{staticfinalWaterQualityService_instanceWaterQualityService._();factoryWaterQualityService()_instance;WaterQualityService._();finalListWaterQualityRecord_records[];finalListLocationWaterQuality_locations[];finalListSafetyAdvice_advices[];finalListWaterQualityStandard_standards[];// 初始化国家标准void_initStandards(){_standards.addAll([WaterQualityStandard(parameterName:pH值,unit:,minValue:6.5,maxValue:8.5,description:饮用水pH值应在6.5-8.5之间,),WaterQualityStandard(parameterName:浊度,unit:NTU,minValue:0,maxValue:1,description:饮用水浊度不应超过1 NTU,),WaterQualityStandard(parameterName:TDS,unit:mg/L,minValue:0,maxValue:500,description:溶解性总固体不应超过500 mg/L,),// ... 更多标准]);}// 达标判断逻辑bool_checkCompliance(WaterQualityRecordr){returnr.ph6.5r.ph8.5r.turbidity1.0r.tds500r.chlorine0.05r.chlorine0.3r.hardness450r.coliform0;}}服务层中的达标判断逻辑完全基于《生活饮用水卫生标准》GB 5749-2022确保检测结果的权威性和准确性。在 Flutter for OpenHarmony 中服务层的代码无需任何修改即可跨平台运行。五、UI 实现亮点5.1 首页仪表盘首页展示水质达标率环形指示器和关键参数概览卡片。使用CustomScrollViewSliverAppBar实现可折叠头部带来流畅的滚动体验。Widget_buildOverviewCards(double complianceRate){finalcolorcomplianceRate90?Colors.green:complianceRate70?Colors.orange:Colors.red;returnContainer(padding:constEdgeInsets.all(20),decoration:BoxDecoration(gradient:LinearGradient(colors:[color.withValues(alpha:0.8),color],),borderRadius:BorderRadius.circular(16),),child:Row(children:[Container(width:80,height:80,decoration:BoxDecoration(shape:BoxShape.circle,border:Border.all(color:Colors.white,width:4),),child:Center(child:Text(${complianceRate.toStringAsFixed(0)}%,style:constTextStyle(color:Colors.white,fontSize:22,fontWeight:FontWeight.bold,),),),),constSizedBox(width:20),Expanded(child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[constText(水质达标率,style:TextStyle(color:Colors.white,fontSize:18,fontWeight:FontWeight.bold,),),Text(complianceRate90?水质优良请放心饮用:complianceRate70?水质一般建议关注:水质较差需要改善,style:constTextStyle(color:Colors.white70,fontSize:14),),],),),],),);}5.2 自绘折线图图表功能使用 Flutter 的CustomPaint实现无需引入第三方图表库在鸿蒙设备上完美运行。支持贝塞尔曲线平滑连接、渐变填充区域和交互式数据点。class_LineChartPainterextendsCustomPainter{finalListWaterQualityRecordrecords;finalStringparameter;finalColorlineColor;overridevoidpaint(Canvascanvas,Sizesize){// 提取参数值finalvaluesrecords.map((r){switch(parameter){casepH值:returnr.ph;case浊度:returnr.turbidity;caseTDS:returnr.tds;case余氯:returnr.chlorine;case总硬度:returnr.hardness;default:return0.0;}}).toList();// 计算坐标映射finalmaxValvalues.reduce((a,b)ab?a:b);finalminValvalues.reduce((a,b)ab?a:b);finalchartRange(maxVal-minVal)*1.2;// 绘制贝塞尔曲线finalpathPath();path.moveTo(points.first.dx,points.first.dy);for(int i1;ipoints.length;i){finalprevpoints[i-1];finalcurrpoints[i];finalcp1Offset(prev.dx(curr.dx-prev.dx)/3,prev.dy,);finalcp2Offset(prev.dx2*(curr.dx-prev.dx)/3,curr.dy,);path.cubicTo(cp1.dx,cp1.dy,cp2.dx,cp2.dy,curr.dx,curr.dy);}canvas.drawPath(path,linePaint);}}5.3 水质地图可视化同样使用CustomPaint自绘地图视图展示各检测地点的水质评分分布。不同颜色代表不同水质等级点击可查看详情。Widget_buildMapView(ListLocationWaterQualitylocations){returnContainer(decoration:BoxDecoration(gradient:LinearGradient(colors:[Colors.blue.shade100,Colors.green.shade100],begin:Alignment.topCenter,end:Alignment.bottomCenter,),),child:CustomPaint(size:Size.infinite,painter:_MapPainter(locations:locations,selectedLocation:_selectedLocation,onLocationTap:(loc)setState(()_selectedLocationloc),),),);}5.4 参数记录表单记录页面提供完整的表单界面支持预设地点快速选择、水源类型下拉选择、7项水质参数录入并内置表单验证和达标自动判断。void_submitRecord(){if(!_formKey.currentState!.validate())return;finalisCompliantph6.5ph8.5turbidity1.0tds500chlorine0.05chlorine0.3hardness450coliform0;finalrecordWaterQualityRecord(id:WQ${DateTime.now().millisecondsSinceEpoch},locationName:_locationController.text.trim(),testTime:DateTime.now(),ph:ph,turbidity:turbidity,tds:tds,chlorine:chlorine,hardness:hardness,temperature:temperature,coliform:coliform,waterSource:_waterSource,isCompliant:isCompliant,);_service.addRecord(record);}六、在鸿蒙设备上运行6.1 运行环境准备确保已安装 Flutter for OpenHarmony 开发环境并配置好鸿蒙设备的连接。本项目使用 DevEco Studio 配合 Flutter 插件进行开发和调试。6.2 构建与运行# 进入项目目录cdoh_demo25# 获取依赖flutter pub get# 构建鸿蒙应用flutter build ohos--release# 安装到设备flutterinstallohos6.3 运行截图以下为应用在鸿蒙设备上的实际运行截图截图一应用首页 - 水质达标率概览首页展示水质达标率环形指示器、关键参数概览卡片和最近检测记录列表。截图二检测数据图表折线图展示 pH 值随时间变化趋势支持切换参数和时间范围。截图三水质达标提示逐项展示各参数与国标的对比情况达标/超标状态一目了然。截图四饮水安全建议分类展示饮水安全知识支持按类别筛选和展开查看详情。截图五地点水质地图可视化展示各检测地点的水质评分分布颜色编码水质等级。截图六检测历史管理按地点和达标状态筛选记录支持排序和滑动删除。截图七水质对比分析双地点多参数横向对比自动标注更优方并生成结论。截图八报告导出分享按条件生成检测报告包含统计概览、摘要和明细记录。七、项目源码完整的项目源码已托管在 AtomGit 平台欢迎访问 https://atomgit.com 获取完整代码。八、总结本文基于 Flutter for OpenHarmony 跨平台框架实现了一款功能完整的饮水水质监测应用。通过本文的实践我们验证了以下几点Flutter for OpenHarmony 的成熟度所有 UI 组件CustomPaint、CustomScrollView、SliverAppBar 等在鸿蒙设备上均能正常运行无需任何平台适配代码。纯 Dart 实现的可能性图表和地图功能完全使用 CustomPaint 自绘未引入任何第三方依赖避免了鸿蒙适配问题。跨平台一致性数据模型、服务层逻辑、UI 布局代码在 Flutter for OpenHarmony 中与标准 Flutter 完全一致开发者无需学习额外知识。性能表现在鸿蒙设备上列表滚动、图表渲染、表单交互等操作流畅无明显卡顿。如果你对 Flutter for OpenHarmony 开发感兴趣欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net交流讨论共同推动 Flutter for OpenHarmony 生态发展。

相关文章:

【maaath】 Flutter for OpenHarmony 饮水水质监测应用开发实战

Flutter for OpenHarmony 饮水水质监测应用开发实战欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 作者:maaath一、引言 随着人们对健康饮水的关注度日益提升,水质监测已成为日常生活中不可或缺的一部分。无论是家庭…...

测试Leader的进阶困境:从管事到管人,再到管战略

在软件测试领域,从一名优秀的测试工程师晋升为测试Leader,往往被视为职业生涯的一次重要跃迁。然而,这场跃迁并非终点,而是一段更为复杂、充满挑战的旅程的开端。许多新晋测试Leader很快就会发现,自己陷入了一种前所未…...

丹诺医药开启招股:拟募资6亿港元 5月22日上市 无营收,年亏1.5亿

雷递网 雷建平 5月14日丹诺医药(苏州)股份有限公司(简称:“丹诺医药”,股票代码:“06872”)日前开启招股,准备2026年5月22日在港交所上市。丹诺医药发售价75.70港元,发行…...

SolidityPy全课程:从零到一的区块链智能合约开发终极指南

SolidityPy全课程:从零到一的区块链智能合约开发终极指南 【免费下载链接】full-blockchain-solidity-course-py Ultimate Solidity, Blockchain, and Smart Contract - Beginner to Expert Full Course | Python Edition 项目地址: https://gitcode.com/gh_mirro…...

LZ4压缩边界深度解析:如何准确计算LZ4_compressBound压缩上限

LZ4压缩边界深度解析:如何准确计算LZ4_compressBound压缩上限 【免费下载链接】lz4 Extremely Fast Compression algorithm 项目地址: https://gitcode.com/GitHub_Trending/lz/lz4 LZ4压缩边界深度解析是理解LZ4高效内存管理的关键。在数据压缩领域&#xf…...

BilibiliDown终极指南:5分钟掌握B站视频下载神器

BilibiliDown终极指南:5分钟掌握B站视频下载神器 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bil…...

PyTorch进阶教程:从模型部署到工程化实战全解析

1. 项目概述与核心价值最近在深度学习社区里,一个名为“TingsongYu/PyTorch-Tutorial-2nd”的项目引起了我的注意。作为一名在算法工程领域摸爬滚打了多年的从业者,我深知对于初学者和希望系统进阶的开发者来说,一份结构清晰、内容扎实、且能…...

ARMv8/v9架构ID_AA64ISAR3_EL1寄存器详解与应用

1. AArch64指令集属性寄存器ID_AA64ISAR3_EL1概述 在ARMv8/v9架构中,ID_AA64ISAR3_EL1是一个关键的系统寄存器,它属于AArch64指令集属性寄存器家族。这个64位寄存器专门用于描述处理器在AArch64执行状态下实现的各种指令集扩展特性。作为ARM架构的标准实…...

【Sora 2正式版深度解析】:20年AI架构师亲测的5大颠覆性功能与企业落地避坑指南

更多请点击: https://intelliparadigm.com 第一章:Sora 2正式版发布背景与核心定位 OpenAI 于2024年第三季度正式发布 Sora 2,标志着文本到视频生成技术从实验性原型迈入工业级应用新阶段。该版本并非简单迭代,而是基于超大规模时…...

Arm SVE特性寄存器ID_AA64ZFR0_EL1解析与优化

1. Arm SVE特性寄存器ID_AA64ZFR0_EL1深度解析在现代处理器架构中,特性寄存器(Feature ID Registers)扮演着硬件能力标识的关键角色。作为Armv8-A架构中Scalable Vector Extension(SVE)的核心配置寄存器,ID…...

React与Next.js构建电商前端:从技术选型到性能优化的完整实践

1. 项目概述:一个电商前端的“肌肉记忆”式构建最近在逛GitHub的时候,看到了一个名为“Nike-Ecommerce”的项目,作者是ItsSanthoshHere。点进去一看,是一个仿耐克官网的电商前端项目。说实话,这类项目在开发者社区里并…...

低成本脉冲多普勒雷达技术解析与应用

1. 低成本脉冲多普勒雷达技术概述脉冲多普勒雷达(Pulse Doppler Radar, PDR)作为一种能够同时测量目标距离和速度的传感器技术,在传统认知中往往与高成本、复杂架构划等号。这种刻板印象主要源于其典型架构需要独立的稳定本振(STALO)和相干振荡器(COHO)系统来保证信…...

Windows系统终极优化神器:Chris Titus Tech WinUtil完整使用指南

Windows系统终极优化神器:Chris Titus Tech WinUtil完整使用指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否曾为Windo…...

AI代理氛围感设计:从功能实现到人性化交互的技术实践

1. 项目概述:当AI代理遇上“氛围感”最近在AI应用开发圈里,一个名为“Agent Vibes”的项目引起了我的注意。这名字起得挺有意思,直译过来是“代理氛围”,听起来不像个严肃的技术项目,反倒像在描述一种状态或感觉。但恰…...

终极Primer CSS组件开发环境配置指南:从零开始搭建专业级工作流

终极Primer CSS组件开发环境配置指南:从零开始搭建专业级工作流 【免费下载链接】css Primer is GitHubs design system. This is the CSS implementation 项目地址: https://gitcode.com/gh_mirrors/cs/css Primer CSS是GitHub官方设计系统的CSS实现&#x…...

英雄联盟智能助手:3分钟上手,让你的游戏体验提升300%

英雄联盟智能助手:3分钟上手,让你的游戏体验提升300% 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄选择犹…...

Photoshop AVIF插件:专业图像工作者的下一代格式解决方案

Photoshop AVIF插件:专业图像工作者的下一代格式解决方案 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 在当今数字图像处理领域,AVIF格…...

C#中矩阵的使用

前言 矩阵在数据处理中有非常广泛的应用,本文主要记录在C#中应用矩阵来处理数据,在后续学到新的相关内容会不时对本文进行更新。 一. 给矩阵/向量添加行列 在数据质量控制中经常会使用滑窗方法,此时对边界层数据就要添加行或列,本…...

3种方法解密网易云音乐NCM文件:让音乐在任何设备自由播放

3种方法解密网易云音乐NCM文件:让音乐在任何设备自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM文件无法在其他播放器使用而烦恼吗?NCM文件解密工具ncmdump能够轻松解决这…...

学Simulink——弱电网条件下双向DC-AC逆变器的鲁棒电流控制仿真

目录 手把手教你学Simulink——弱电网条件下双向DC-AC逆变器的鲁棒电流控制仿真 一、背景与挑战 1.1 什么是弱电网?为什么它“弱”? 1.2 核心痛点与鲁棒控制目标 二、系统架构与核心控制推导 2.1 整体架构:功率级(含 Lg​&am…...

使用Taotoken模型广场为特定任务选择性价比最高的模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken模型广场为特定任务选择性价比最高的模型 当开发者需要为摘要、翻译、代码生成等具体任务接入大模型时,常…...

终极指南:如何通过awesome-hyper主题配色方案提升终端可读性

终极指南:如何通过awesome-hyper主题配色方案提升终端可读性 【免费下载链接】awesome-hyper 🖥 Delightful Hyper plugins, themes, and resources 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-hyper Hyper终端是一款基于Web技术构建的…...

终极指南:如何在FaceAI中添加完美中文文本,让你的人脸识别项目更接地气

终极指南:如何在FaceAI中添加完美中文文本,让你的人脸识别项目更接地气 【免费下载链接】faceai 一款入门级的人脸、视频、文字检测以及识别的项目. 项目地址: https://gitcode.com/gh_mirrors/fa/faceai FaceAI是一款入门级的人脸、视频、文字检…...

AI应用开发利器:Prompster提示词管理库的设计与实践

1. 项目概述:一个为AI应用开发者准备的提示词管理利器如果你正在开发基于大语言模型(LLM)的应用,无论是聊天机器人、内容生成工具,还是复杂的AI工作流,那么你一定对“提示词工程”这个词深有体会。从最初的…...

如何使用AI代码库分析工具快速掌握gRPC:高性能服务通信的终极指南

如何使用AI代码库分析工具快速掌握gRPC:高性能服务通信的终极指南 【免费下载链接】Tutorial-Codebase-Knowledge Pocket Flow: Codebase to Tutorial 项目地址: https://gitcode.com/gh_mirrors/tu/Tutorial-Codebase-Knowledge 你是否曾经面对复杂的gRPC代…...

艾尔登法环帧率解锁神器:告别60帧限制的终极指南

艾尔登法环帧率解锁神器:告别60帧限制的终极指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenRin…...

Go语言树结构:二叉树与AVL树

Go语言树结构:二叉树与AVL树 1. 二叉树实现 type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode }type BinaryTree struct {Root *TreeNode }func (t *BinaryTree) Insert(val int) {t.Root insert(t.Root, val) }func insert(node *TreeNode, val in…...

Spec Kit性能优化:10个提升大规模项目规范处理效率的技巧

Spec Kit性能优化:10个提升大规模项目规范处理效率的技巧 【免费下载链接】spec-kit 💫 Toolkit to help you get started with Spec-Driven Development 项目地址: https://gitcode.com/GitHub_Trending/sp/spec-kit Spec Kit作为规范驱动开发&a…...

ARM调试断点寄存器DBGBVR_EL1原理与应用详解

1. ARM调试断点寄存器DBGBVR_EL1深度解析在嵌入式系统开发和底层调试过程中,断点功能是诊断复杂问题的关键工具。作为ARM架构调试系统的核心组件,DBGBVR_EL1寄存器与配套的DBGBCR_EL1控制寄存器共同构成了强大的硬件断点机制。不同于软件断点需要修改指令…...

ARM AMU寄存器架构与性能监控实战指南

1. ARM AMU寄存器架构解析在ARMv8.4及后续架构中,Activity Monitor Unit(AMU)作为性能监控单元的重要扩展,为开发者提供了更精细化的硬件事件监控能力。与传统的PMU相比,AMU引入了多组专用寄存器,能够在不显…...