【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)

七、实际应用场景

  • 日常用药:管理日常服药
  • 慢性病管理:长期用药管理
  • 老人关怀:帮助老人管理用药

八、优化建议

  1. 提醒通知:添加服药提醒通知
  2. 历史记录:保存服药历史
  3. 药品信息:添加药品详细信息

九、常见问题与解决方案

9.1 提醒失效

问题:应用关闭后提醒失效

解决方案:使用后台服务保持提醒

9.2 数据同步

问题:多设备数据同步

解决方案:使用云存储同步数据

十、总结

本文详细介绍了Flutter鸿蒙药品提醒的实现,包括药品管理、服药记录等核心技术。通过本实例,掌握了状态管理和列表操作的使用方法。

十一、参考资料

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐