尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
基于Flutter的老年人用药提醒APP的设计与实现
一、背景与意义随着人口老龄化进程的加速老年人慢性病患病率持续上升多药并用现象普遍。然而老年人记忆力减退、视力下降等问题导致漏服、错服、重复服药等用药安全问题频发严重影响治疗效果与生命安全。传统的纸质药盒、口头提醒等方式已难以满足精准、智能的用药管理需求。在此背景下开发一款基于移动端的老年人用药提醒APP具有重要的现实意义提升用药依从性通过定时提醒、语音播报等功能有效减少漏服、忘服情况。保障用药安全记录用药历史、设置禁忌提醒避免药物相互作用与重复用药风险。减轻照护负担为子女或护工提供远程查看与管理入口实现“科技助老”。促进健康管理整合用药数据为健康评估与就医提供参考。选择Flutter框架进行跨平台开发可以一次性构建iOS与Android应用大幅降低开发与维护成本快速响应市场需求。二、技术栈选型本项目采用Flutter为核心框架结合一系列成熟的插件与后端服务构建稳定、高效的应用。类别技术/组件说明核心框架Flutter 3.xGoogle开源的UI工具包用于构建跨平台原生应用。状态管理Provider / Riverpod用于管理应用全局状态如用户信息、药品列表实现数据响应式更新。本地存储sqflite / Hive用于持久化存储药品信息、用药记录、用户设置等数据。网络请求Dio强大的HTTP客户端用于与后端API交互如同步数据、获取药品库。推送与本地通知flutter_local_notifications实现定时用药提醒的本地通知功能确保离线可用。权限管理permission_handler处理应用所需的通知、存储等系统权限。日期时间intl用于日期格式化与本地化。UI组件库Flutter Material/Cupertino提供丰富的预置组件快速构建符合设计规范且对老年人友好的大字体、高对比度界面。后端可选Firebase / 自建Node.js用于实现用户认证、数据云同步、家庭共享等高级功能。三、核心功能模块设计APP主要包含以下核心模块药品管理添加/编辑药品名称、剂量、图片、用法。用药计划为每种药品设置提醒时间、频率每日、每周特定天、疗程。提醒中心基于本地通知触发用药提醒支持重复提醒、用药确认记录。用药记录日历视图展示历史用药情况已服、漏服。个人中心用户设置、紧急联系人、健康档案。家庭共享可选绑定家庭成员远程查看老人用药情况。四、核心代码实现示例1. 数据模型定义 (Medicine)class Medicine { int? id; String name; String dosage; // 如“一次一片” String? imagePath; ListString weekdays; // 每周哪几天服药如[Mon, Wed, Fri] ListTimeOfDay reminderTimes; // 每天的服药时间点 DateTime startDate; DateTime? endDate; bool isActive; Medicine({ this.id, required this.name, required this.dosage, this.imagePath, required this.weekdays, required this.reminderTimes, required this.startDate, this.endDate, this.isActive true, }); MapString, dynamic toMap() { return { id: id, name: name, dosage: dosage, imagePath: imagePath, weekdays: jsonEncode(weekdays), reminderTimes: jsonEncode(reminderTimes.map((t) ${t.hour}:${t.minute}).toList()), startDate: startDate.toIso8601String(), endDate: endDate?.toIso8601String(), isActive: isActive ? 1 : 0, }; } // fromMap 工厂方法省略... }2. 本地通知服务 (ReminderService)import package:flutter_local_notifications/flutter_local_notifications.dart; class ReminderService { static final FlutterLocalNotificationsPlugin _notificationsPlugin FlutterLocalNotificationsPlugin(); static Futurevoid initialize() async { const AndroidInitializationSettings initializationSettingsAndroid AndroidInitializationSettings(mipmap/ic_launcher); final InitializationSettings initializationSettings InitializationSettings(android: initializationSettingsAndroid); await _notificationsPlugin.initialize(initializationSettings); } // 为单个药品的某个时间点设置每日重复提醒 static Futurevoid scheduleDailyReminder( int medicineId, String medicineName, TimeOfDay time) async { final now DateTime.now(); final scheduledTime DateTime( now.year, now.month, now.day, time.hour, time.minute); // 如果设定时间已过则从明天开始 if (scheduledTime.isBefore(now)) { scheduledTime.add(const Duration(days: 1)); } const AndroidNotificationDetails androidPlatformChannelSpecifics AndroidNotificationDetails( medicine_reminder_channel, 用药提醒, importance: Importance.max, priority: Priority.high, playSound: true, sound: RawResourceAndroidNotificationSound(alert), ); await _notificationsPlugin.zonedSchedule( medicineId * 100 time.hour, // 生成唯一ID 用药时间到, 请服用$medicineName, _scheduleDaily(scheduledTime), const NotificationDetails(android: androidPlatformChannelSpecifics), androidAllowWhileIdle: true, uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, matchDateTimeComponents: DateTimeComponents.time, ); } static TZDateTime _scheduleDaily(DateTime scheduledTime) { return TZDateTime.from(scheduledTime, local); } // 取消某个药品的所有提醒 static Futurevoid cancelRemindersForMedicine(int medicineId) async { // 假设我们为每个时间点生成的ID规则已知 for (int hour in [8, 12, 18, 21]) { // 示例时间 await _notificationsPlugin.cancel(medicineId * 100 hour); } } }3. 主页面状态管理与UI (MedicineListPage)import package:flutter/material.dart; import package:provider/provider.dart; import medicine.dart; import medicine_database.dart; class MedicineListPage extends StatelessWidget { override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text(我的药品), actions: [ IconButton( icon: const Icon(Icons.add), onPressed: () Navigator.pushNamed(context, /addMedicine), ), ], ), body: FutureBuilderListMedicine( future: Provider.ofMedicineDatabase(context, listen: false).getAllMedicines(), builder: (context, snapshot) { if (snapshot.connectionState ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } if (!snapshot.hasData || snapshot.data!.isEmpty) { return const Center(child: Text(暂无药品请点击右上角添加)); } final medicines snapshot.data!; return ListView.builder( itemCount: medicines.length, itemBuilder: (context, index) { final medicine medicines[index]; return Card( child: ListTile( leading: medicine.imagePath ! null ? CircleAvatar(backgroundImage: FileImage(File(medicine.imagePath!))) : const CircleAvatar(child: Icon(Icons.medication)), title: Text( medicine.name, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), subtitle: Text(剂量${medicine.dosage}), trailing: Switch( value: medicine.isActive, onChanged: (value) async { // 更新药品激活状态并同步提醒 await Provider.ofMedicineDatabase(context, listen: false) .updateMedicine(medicine.copyWith(isActive: value)); if (value) { // 重新激活提醒 for (var time in medicine.reminderTimes) { ReminderService.scheduleDailyReminder(medicine.id!, medicine.name, time); } } else { ReminderService.cancelRemindersForMedicine(medicine.id!); } }, ), onTap: () Navigator.pushNamed(context, /medicineDetail, arguments: medicine.id), ), ); }, ); }, ), ); } }五、总结与展望本文介绍了基于Flutter开发老年人用药提醒APP的技术方案。通过合理的技术栈选型与模块化设计可以高效构建出界面友好、功能实用的应用。核心在于稳定的本地通知提醒与简洁直观的数据管理。未来可拓展方向包括接入智能语音助手进行语音交互、集成健康设备数据、引入用药知识图谱进行智能警示、开发Web管理端供医护人员使用等从而打造更全面的智慧养老健康管理平台。
RELATED

相关推荐

多智能体系统共谋检测:从博弈论到LLM智能体的审计框架

多智能体系统共谋检测:从博弈论到LLM智能体的审计框架

1. 项目概述:当智能体开始“密谋”最近在折腾多智能体系统(Multi-Agent Systems, MAS)时,我一直在琢磨一个挺有意思但又有点“阴暗”的问题:当一群智能体被设计成要合作完成一个任务时,它们会不会“私下勾结…

📅 2026/10/15 12:43:21
springboot 骑行服务平台

springboot 骑行服务平台

一、关键词 骑行服务平台、骑行服务、骑行服务预约、骑行服务管理 二、作品包含 源码数据库万字设计文档PPT全套环境和工具资源本地部署教程 三、项目技术 前端技术: Html、Css、Js、Vue3.5、Element-Plus 后端技术:Java、SpringBoot3.3.0、MyBatis-…

📅 2026/10/15 12:00:18
RAG效果总是一成不变?别怪模型,是你喂给它的Context总是那几条“老面孔”!

RAG效果总是一成不变?别怪模型,是你喂给它的Context总是那几条“老面孔”!

前言:被“锁死”的RAG上下文在Coze上搭建基于RAG(检索增强生成)的智能体时,我们经常会遇到一个诡异的现象:用户明明问的是不同的问题,或者即使是相同的问题,我们也希望模型能给出不同角度的回答…

📅 2026/10/18 10:04:32
MORE NEWS

更多资讯

📰

丽水低压电工证怎么考 在哪考最新流程与避坑指南

丽水低压电工证怎么考 在哪考最新流程与避坑指南 证书过期了不知道怎么复审延期?别急,这篇文章就告诉你丽水低压电工证怎么考, 在哪考 的全流程,还有真实考试通过率、电子证书查询方式,助你一步到位。 丽水低压电工证的报考门槛你了解多少?…

📰

鹰潭电工证报名入口内部消息:电工证丢了怎么补办?找证就上岗

鹰潭电工证报名入口内部消息:电工证丢了怎么补办?找证就上岗 你是不是正愁找不到电工证?工地、工厂、物业、建筑单位,哪哪都要求有电工证才能上岗, 内部消息…

📰

工地太忙根本没时间复习考试?中级电工证ppt官方回应来了

工地太忙根本没时间复习考试?中级电工证ppt官方回应来了 你是不是也遇到过这种情况?工地天天加班,项目赶得紧,连吃饭的时间都紧张,更别说抽空复习考试了。特别是像中级电工证这类证书,一旦到期不换证,不仅影响工作,还可能面临被停工的风险。而最近…

📰

电工证报名门槛低?罗湖申请电工证咨询教你上岗必备的真相

电工证报名门槛低?罗湖申请电工证咨询教你上岗必备的真相 学历不高怕报不上名?罗湖申请电工证咨询,这事儿其实没你想象的难。电工证是很多施工岗位的 上岗必备 ,哪怕你初中毕业也能报考,关键看你想不想干,能不能坚持。…

📰

罗湖申请电工证咨询到期换证流程网上查询攻略

罗湖申请电工证咨询到期换证流程网上查询攻略 怕考不过白交培训费?罗湖申请电工证咨询的小伙伴,我懂你。现在网上查询电工证信息的越来越多,但很多人还是因为流程复杂、材料不全、考试内容不熟,最后浪费钱又没拿到证。今天我从劳务班组负责人的角度,给你…

📰

人社电工证报名流程在哪考之前考的证在外省能不能转过来

人社电工证报名流程在哪考之前考的证在外省能不能转过来 之前考的证在外省能不能转过来?这是很多已经在外地打工、打算回来发展的电工朋友最关心的问题。别急,今天就从人社电工证报名流程和证书转移的真实操作入手,把整个流程说清楚,让你知道【在哪考】、…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬