欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

image-20260408223647727

image-20260408223636691

image-20260408223655623

1.1 应用简介

药物相互作用查询是一款专业的用药安全助手应用,旨在帮助用户查询药物相互作用和禁忌信息,提供智能分析服务。应用内置药物数据库,支持多种药物同时查询,自动分析潜在风险,为用户提供专业的用药建议。

应用以沉稳的蓝色为主色调,象征医疗健康的专业与可信。涵盖药物查询、分析结果、查询历史、关于信息四大模块。用户可以搜索药物、添加到查询列表、获取相互作用分析结果,并保存查询记录以备后续参考。

1.2 核心功能

功能模块 功能描述 实现方式
药物搜索 支持中英文药物名称搜索 模糊匹配
相互作用分析 自动检测药物相互作用 数据库匹配
风险等级评估 四级风险评估体系 枚举定义
查询历史 保存历史查询记录 本地存储
专业建议 提供用药建议和注意事项 数据关联
症状提示 显示需警惕的不良反应 列表展示

1.3 相互作用等级定义

序号 等级名称 Emoji 颜色 描述
1 严重 🔴 #D32F2F 禁止联用,可能危及生命
2 中等 🟠 #F57C00 谨慎使用,需医生指导
3 轻微 🟡 #FFA000 注意观察,可能需调整剂量
4 🟢 #388E3C 可以安全联用

1.4 药物分类定义

序号 分类名称 Emoji 描述
1 抗生素 💊 抗细菌感染药物
2 止痛药 💉 镇痛消炎药物
3 心血管药 ❤️ 心血管系统药物
4 糖尿病药 🩸 降血糖药物
5 呼吸系统药 🫁 呼吸系统疾病药物
6 消化系统药 🫃 消化系统疾病药物
7 神经系统药 🧠 神经系统疾病药物
8 激素类药 ⚗️ 激素及相关药物

1.5 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
数据存储 内存存储 -
搜索算法 模糊匹配 -
目标平台 鸿蒙OS / Web API 21+

1.6 项目结构

lib/
└── main_drug_interaction.dart
    ├── DrugInteractionApp           # 应用入口
    ├── InteractionLevel             # 相互作用等级枚举
    ├── DrugCategory                 # 药物分类枚举
    ├── Drug                         # 药物模型
    ├── DrugInteraction              # 相互作用模型
    ├── QueryRecord                  # 查询记录模型
    ├── DrugInteractionHomePage      # 主页面(底部导航)
    ├── _buildQueryPage              # 查询页面
    ├── _buildAnalysisPage           # 分析页面
    ├── _buildHistoryPage            # 历史页面
    └── _buildProfilePage            # 关于页面

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
DrugInteractionHomePage

查询页

分析页

历史页

关于页

搜索框

药物列表

已选药物

分析结果

风险提示

建议措施

历史列表

记录详情

重要声明

功能说明

药物管理器
DrugManager

相互作用检测器
InteractionChecker

查询记录管理
QueryRecordManager

Drug
药物数据

DrugInteraction
相互作用数据

QueryRecord
查询记录

DrugCategory
药物分类

InteractionLevel
风险等级

2.2 类图设计

has

has

references

contains

contains

manages

analyzes

records

DrugInteractionApp

+Widget build()

«enumeration»

InteractionLevel

+String label

+String emoji

+Color color

+String description

+severe()

+moderate()

+mild()

+none()

«enumeration»

DrugCategory

+String label

+String emoji

+antibiotic()

+painkiller()

+cardiovascular()

+diabetes()

+respiratory()

+digestive()

+nervous()

+hormone()

Drug

+String id

+String name

+String genericName

+DrugCategory category

+String description

+List<String> indications

+List<String> contraindications

+List<String> sideEffects

DrugInteraction

+String drug1Id

+String drug2Id

+InteractionLevel level

+String mechanism

+String effect

+String recommendation

+List<String> symptoms

QueryRecord

+String id

+List<Drug> drugs

+List<DrugInteraction> interactions

+DateTime queryTime

+String? note

+InteractionLevel worstLevel

DrugInteractionHomePage

-int _selectedIndex

-List<Drug> _selectedDrugs

-List<DrugInteraction> _interactions

-List<QueryRecord> _queryHistory

-List<Drug> _drugDatabase

-List<DrugInteraction> _interactionDatabase

+Widget build()

-_searchDrugs()

-_addDrug()

-_removeDrug()

-_checkInteractions()

-_saveQuery()

2.3 页面导航流程

查询

分析

历史

关于

>=2

<2

应用启动

查询页

底部导航

搜索药物

查看结果

历史记录

应用信息

输入药物名称

显示搜索结果

点击添加药物

更新已选列表

药物数量

显示分析按钮

跳转分析页

显示相互作用

查看详细信息

保存查询

2.4 相互作用检测流程

数据库 分析引擎 查询页 用户 数据库 分析引擎 查询页 用户 添加药物A 检查相互作用 查询药物A相关 返回空(单药) 添加药物B 检查相互作用 查询A-B组合 返回相互作用数据 显示风险提示 点击分析 获取详细分析 显示完整报告

三、核心模块设计

3.1 数据模型设计

3.1.1 相互作用等级枚举 (InteractionLevel)
enum InteractionLevel {
  severe(label: '严重', emoji: '🔴', color: Color(0xFFD32F2F), description: '禁止联用,可能危及生命'),
  moderate(label: '中等', emoji: '🟠', color: Color(0xFFF57C00), description: '谨慎使用,需医生指导'),
  mild(label: '轻微', emoji: '🟡', color: Color(0xFFFFA000), description: '注意观察,可能需调整剂量'),
  none(label: '无', emoji: '🟢', color: Color(0xFF388E3C), description: '可以安全联用');

  final String label;
  final String emoji;
  final Color color;
  final String description;
}
3.1.2 药物分类枚举 (DrugCategory)
enum DrugCategory {
  antibiotic(label: '抗生素', emoji: '💊'),
  painkiller(label: '止痛药', emoji: '💉'),
  cardiovascular(label: '心血管药', emoji: '❤️'),
  diabetes(label: '糖尿病药', emoji: '🩸'),
  respiratory(label: '呼吸系统药', emoji: '🫁'),
  digestive(label: '消化系统药', emoji: '🫃'),
  nervous(label: '神经系统药', emoji: '🧠'),
  hormone(label: '激素类药', emoji: '⚗️');

  final String label;
  final String emoji;
}
3.1.3 药物模型 (Drug)
class Drug {
  final String id;              // 药物ID
  final String name;            // 药物名称(中文)
  final String genericName;     // 通用名(英文)
  final DrugCategory category;  // 药物分类
  final String description;     // 药物描述
  final List<String> indications;      // 适应症
  final List<String> contraindications; // 禁忌症
  final List<String> sideEffects;      // 不良反应
}
3.1.4 相互作用模型 (DrugInteraction)
class DrugInteraction {
  final String drug1Id;         // 药物1 ID
  final String drug2Id;         // 药物2 ID
  final InteractionLevel level; // 风险等级
  final String mechanism;       // 作用机制
  final String effect;          // 可能影响
  final String recommendation;  // 建议措施
  final List<String> symptoms;  // 需警惕症状
}
3.1.5 查询记录模型 (QueryRecord)
class QueryRecord {
  final String id;                      // 记录ID
  final List<Drug> drugs;               // 查询药物列表
  final List<DrugInteraction> interactions; // 相互作用列表
  final DateTime queryTime;             // 查询时间
  final String? note;                   // 备注
  
  InteractionLevel get worstLevel;      // 最严重风险等级
}
3.1.6 风险等级分布
40% 20% 20% 20% 相互作用风险等级分布示例 严重 中等 轻微

3.2 页面结构设计

3.2.1 主页面布局

DrugInteractionHomePage

IndexedStack

查询页

分析页

历史页

关于页

NavigationBar

查询 Tab

分析 Tab

历史 Tab

关于 Tab

3.2.2 查询页结构

查询页

SliverAppBar

快速统计

搜索框

已选药物

标题

统计数据

药物数据

相互作用

查询记录

输入框

搜索结果

药物卡片

药物列表

删除按钮

分析按钮

3.2.3 分析页结构

分析页

SliverAppBar

结果概览

相互作用列表

标题

保存按钮

风险图标

发现数量

相互作用卡片

药物组合

风险等级

作用机制

建议措施

症状提示

3.2.4 历史页结构

历史页

SliverAppBar

统计概览

记录列表

记录数量

记录卡片

药物组合

查询日期

风险等级

3.3 相互作用检测逻辑

<2

>=2

添加药物

更新已选列表

药物数量

等待更多药物

遍历药物组合

查询相互作用数据库

找到记录?

添加到结果列表

继续下一组合

还有组合?

更新显示

3.4 风险等级计算

更严重

相同或更轻

获取相互作用列表

遍历所有相互作用

比较风险等级

更新最差等级

保持当前等级

继续遍历

遍历完成?

返回最差等级


四、UI设计规范

4.1 配色方案

应用以沉稳的蓝色为主色调,象征医疗健康的专业与可信:

颜色类型 色值 用途
主色 #1976D2 (Blue) 导航、主题元素
辅助色 #2196F3 分析页面
第三色 #42A5F5 历史页面
强调色 #64B5F6 关于页面
背景色 #FAFAFA 页面背景
卡片背景 #FFFFFF 药物卡片

4.2 风险等级颜色

风险等级 色值 视觉效果
严重 #D32F2F 警示红色
中等 #F57C00 警告橙色
轻微 #FFA000 注意黄色
#388E3C 安全绿色

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
药物名称 16px Bold #000000
通用名 12px Regular 灰色
分类标签 11px Regular 灰色
风险等级 14px Bold 等级颜色
统计数字 20px Bold 白色

4.4 组件规范

4.4.1 药物卡片
┌─────────────────────────────────────┐
│  ┌────┐                             │
│  │ 💊 │  阿司匹林                    │
│  └────┘  Aspirin                    │
│          止痛药                      │
│                              [🗑️]   │
└─────────────────────────────────────┘
4.4.2 相互作用卡片
┌─────────────────────────────────────────────────────┐
│  🔴  阿司匹林 + 华法林                    [严重]    │
│      严重相互作用                                    │
├─────────────────────────────────────────────────────┤
│  作用机制                                            │
│  阿司匹林增强华法林抗凝作用                          │
│                                                     │
│  可能影响                                            │
│  显著增加出血风险                                    │
│                                                     │
│  建议措施                                            │
│  禁止联用,如必须联用需密切监测INR                   │
│                                                     │
│  需警惕症状:                                        │
│  [消化道出血] [颅内出血] [皮下瘀斑]                  │
└─────────────────────────────────────────────────────┘
4.4.3 搜索结果
┌─────────────────────────────────────┐
│  💊  阿司匹林            止痛药      │
│      Aspirin                        │
├─────────────────────────────────────┤
│  💊  阿莫西林            抗生素      │
│      Amoxicillin                    │
├─────────────────────────────────────┤
│  ❤️  氨氯地平            心血管药    │
│      Amlodipine                     │
└─────────────────────────────────────┘
4.4.4 快速统计
┌─────────────────────────────────────────────────────┐
│                                                     │
│    💊          ⚠️          🔍                       │
│    10          6           5                        │
│  药物数据    相互作用    查询记录                    │
│                                                     │
└─────────────────────────────────────────────────────┘

五、核心功能实现

5.1 药物搜索实现

void _searchDrugs(String query) {
  if (query.isEmpty) {
    setState(() {
      _searchResults = [];
      _isSearching = false;
    });
    return;
  }

  setState(() {
    _isSearching = true;
    _searchResults = _drugDatabase
        .where((drug) =>
            drug.name.toLowerCase().contains(query.toLowerCase()) ||
            drug.genericName.toLowerCase().contains(query.toLowerCase()))
        .toList();
  });
}

5.2 添加药物实现

void _addDrug(Drug drug) {
  if (_selectedDrugs.any((d) => d.id == drug.id)) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text('${drug.name} 已添加'),
        backgroundColor: Colors.orange,
      ),
    );
    return;
  }

  setState(() {
    _selectedDrugs.add(drug);
    _searchController.clear();
    _searchResults = [];
    _isSearching = false;
  });

  _analyzeInteractions();
}

5.3 相互作用检测实现

List<DrugInteraction> _checkInteractions(List<Drug> drugs) {
  final interactions = <DrugInteraction>[];

  for (int i = 0; i < drugs.length; i++) {
    for (int j = i + 1; j < drugs.length; j++) {
      final interaction = _interactionDatabase.where(
        (inter) =>
            (inter.drug1Id == drugs[i].id && inter.drug2Id == drugs[j].id) ||
            (inter.drug1Id == drugs[j].id && inter.drug2Id == drugs[i].id),
      );

      interactions.addAll(interaction);
    }
  }

  return interactions;
}

5.4 最差风险等级计算

InteractionLevel get worstLevel {
  if (interactions.isEmpty) return InteractionLevel.none;
  var worst = InteractionLevel.none;
  for (var interaction in interactions) {
    if (interaction.level.index < worst.index) {
      worst = interaction.level;
    }
  }
  return worst;
}

5.5 保存查询记录

void _saveQuery() {
  if (_selectedDrugs.isEmpty) return;

  final record = QueryRecord(
    id: 'query_${DateTime.now().millisecondsSinceEpoch}',
    drugs: List.from(_selectedDrugs),
    interactions: List.from(_interactions),
    queryTime: DateTime.now(),
  );

  setState(() {
    _queryHistory.insert(0, record);
  });

  ScaffoldMessenger.of(context).showSnackBar(
    const SnackBar(
      content: Text('查询记录已保存'),
      backgroundColor: Color(0xFF1976D2),
    ),
  );
}

六、交互设计

6.1 药物搜索流程

结果列表 搜索引擎 搜索框 用户 结果列表 搜索引擎 搜索框 用户 输入药物名称 触发搜索 模糊匹配 返回结果 显示药物卡片

6.2 相互作用分析流程

<2

>=2

选择药物

添加到列表

触发分析

药物数量

等待更多

遍历组合

查询数据库

找到相互作用?

添加到结果

继续下一组

遍历完成?

更新显示

6.3 查询记录管理

保存查询

继续保存

清空历史

空列表

有记录


七、扩展功能规划

7.1 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 2024-03-31 药物数据库 搜索功能 相互作用分析 扩展药物库 智能推荐 用药提醒 云端同步 医生端对接 AI分析引擎 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 药物相互作用查询应用开发计划

7.2 功能扩展建议

7.2.1 智能推荐

推荐功能:

  • 基于病史推荐替代药物
  • 个性化用药建议
  • 剂量调整建议
  • 用药时间优化
7.2.2 云端服务

云端功能:

  • 数据云端备份
  • 多设备同步
  • 医生端数据共享
  • 远程问诊对接
7.2.3 AI分析

AI功能:

  • 深度学习风险预测
  • 文献自动更新
  • 不良反应预警
  • 个体化用药分析

八、注意事项

8.1 开发注意事项

  1. 数据准确性:药物数据必须经过专业审核,确保准确可靠

  2. 免责声明:应用需明确声明仅供参考,不能替代专业医疗建议

  3. 隐私保护:用户用药数据需妥善保护,符合相关法规

  4. 更新维护:药物数据库需定期更新,保持最新状态

  5. 性能优化:大量药物数据时需优化搜索性能

8.2 常见问题

问题 原因 解决方案
搜索无结果 药物名称拼写错误 支持模糊搜索
相互作用未检测 数据库不完整 持续扩充数据库
风险等级异常 枚举顺序错误 检查index比较逻辑
历史记录丢失 未持久化存储 实现本地存储
显示卡顿 数据量大 优化渲染性能

8.3 安全提示

⚠️ 重要安全提示 ⚠️

本应用仅供参考

  • 不能替代专业医疗建议
  • 用药前请咨询医生或药师
  • 数据库信息可能不完整
  • 如有疑问请及时就医

用药安全原则

  • 遵医嘱用药
  • 了解药物禁忌
  • 注意不良反应
  • 定期复查

九、运行说明

9.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+
Web浏览器 Chrome 90+

9.2 运行命令

# 查看可用设备
flutter devices

# 运行到Web服务器
flutter run -d web-server -t lib/main_drug_interaction.dart --web-port 8134

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_drug_interaction.dart

# 代码分析
flutter analyze lib/main_drug_interaction.dart

十、总结

药物相互作用查询应用通过药物查询、分析结果、查询历史、关于信息四大模块,为用户提供了一个专业的用药安全助手平台。应用内置药物数据库,支持多种药物同时查询,自动分析潜在风险,为用户提供专业的用药建议。

核心功能涵盖药物搜索、相互作用分析、风险等级评估、查询历史四大模块。药物数据库包含10种常见药物,相互作用数据库包含6组典型相互作用;搜索功能支持中英文模糊匹配;分析功能自动检测药物组合风险;历史功能保存查询记录以备后续参考。

应用采用 Material Design 3 设计规范,以沉稳的蓝色为主色调,象征医疗健康的专业与可信。四级风险评估体系(严重、中等、轻微、无)直观展示用药风险,帮助用户做出明智的用药决策。通过本应用,希望能够帮助用户安全用药,守护健康。

药物相互作用查询——用药安全,守护健康


Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐