【flutter for open harmony】第三方库Flutter 鸿蒙版 药品提醒 实战指南(适配 1.0.0)✨
·
【flutter for open harmony】第三方库Flutter 鸿蒙版 药品提醒 实战指南(适配 1.0.0)✨
Flutter实战:药品提醒
Flutter 三方库 cached_network_image 的鸿蒙化适配与实战指南
欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net
本文详细介绍如何在Flutter鸿蒙应用中实现药品提醒功能,管理用药记录。
一、前言
药品提醒帮助用户按时服药,本文将带领大家使用Flutter开发一个药品提醒应用。
二、效果展示

2.1 功能特性
| 功能 | 描述 |
|---|---|
| 药品管理 | 添加和管理药品 |
| 服药记录 | 记录服药状态 |
| 时间设置 | 设置服药时间 |
| 统计显示 | 显示服药统计 |
三、项目背景与目标
3.1 项目背景
按时服药对治疗效果至关重要,药品提醒帮助用户管理用药。
3.2 项目目标
- 实现药品管理功能
- 支持服药记录
- 提供统计展示
四、技术架构设计
4.1 核心技术
- StatefulWidget: 状态管理
- Checkbox: 状态选择
- List: 数据存储
4.2 实现原理
使用列表存储药品信息,通过复选框记录服药状态。
五、详细实现
5.1 Flutter端实现
import 'package:flutter/material.dart';
class MedicineReminderPage extends StatefulWidget {
const MedicineReminderPage({super.key});
State<MedicineReminderPage> createState() => _MedicineReminderPageState();
}
class _MedicineReminderPageState extends State<MedicineReminderPage> {
final List<Map<String, dynamic>> _medicines = [
{'name': '维生素C', 'dosage': '1片', 'times': ['08:00', '20:00'], 'taken': [false, false]},
{'name': '感冒药', 'dosage': '2片', 'times': ['12:00'], 'taken': [false]},
];
void _toggleTaken(int medicineIndex, int timeIndex) {
setState(() {
_medicines[medicineIndex]['taken'][timeIndex] = !_medicines[medicineIndex]['taken'][timeIndex];
});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('药品提醒'),
centerTitle: true,
backgroundColor: Colors.red,
foregroundColor: Colors.white,
),
body: Column(
children: [
Container(
padding: const EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Text('药品数: ${_medicines.length}'),
Text('已服用: ${_medicines.fold<int>(0, (sum, m) => sum + (m['taken'] as List).where((t) => t as bool).length)}'),
],
),
),
Expanded(
child: ListView.builder(
itemCount: _medicines.length,
itemBuilder: (context, index) {
final medicine = _medicines[index];
final times = medicine['times'] as List;
final taken = medicine['taken'] as List;
return Card(
child: Column(
children: [
ListTile(
leading: Icon(Icons.medication, color: Colors.red),
title: Text(medicine['name']),
subtitle: Text('剂量: ${medicine['dosage']}'),
),
...times.asMap().entries.map((entry) {
final timeIndex = entry.key;
final time = entry.value;
final isTaken = taken[timeIndex] as bool;
return ListTile(
leading: Icon(isTaken ? Icons.check_circle : Icons.radio_button_unchecked, color: isTaken ? Colors.green : Colors.grey),
title: Text(time),
trailing: Text(isTaken ? '已服用' : '待服用'),
onTap: () => _toggleTaken(index, timeIndex),
);
}),
],
),
);
},
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: const Icon(Icons.add),
),
);
}
}
六、核心功能解析
6.1 服药状态切换
切换服药状态:
void _toggleTaken(int medicineIndex, int timeIndex) {
setState(() {
_medicines[medicineIndex]['taken'][timeIndex] = !_medicines[medicineIndex]['taken'][timeIndex];
});
}
6.2 统计计算
计算已服用次数:
_medicines.fold<int>(0, (sum, m) => sum + (m['taken'] as List).where((t) => t as bool).length)
七、实际应用场景
- 日常用药:管理日常服药
- 慢性病管理:长期用药管理
- 老人关怀:帮助老人管理用药
八、优化建议
- 提醒通知:添加服药提醒通知
- 历史记录:保存服药历史
- 药品信息:添加药品详细信息
九、常见问题与解决方案
9.1 提醒失效
问题:应用关闭后提醒失效
解决方案:使用后台服务保持提醒
9.2 数据同步
问题:多设备数据同步
解决方案:使用云存储同步数据
十、总结
本文详细介绍了Flutter鸿蒙药品提醒的实现,包括药品管理、服药记录等核心技术。通过本实例,掌握了状态管理和列表操作的使用方法。
十一、参考资料
更多推荐

所有评论(0)