1. 项目背景与需求分析
在智能家居和健康管理日益普及的今天,家庭药箱管理成为一个被忽视但极其重要的场景。传统纸质记录或简单备忘的方式存在诸多痛点:药品过期无法及时提醒、家庭成员用药记录混乱、处方药与非处方药混放等安全隐患。这正是我们选择开发"家庭药箱管理App"的核心动机。
Flutter作为跨平台框架,其"一次编写,多端运行"的特性非常适合家庭场景下的多设备覆盖需求。而OpenHarmony作为国产分布式操作系统,在设备互联和数据安全方面具有独特优势。两者的结合可以充分发挥Flutter的UI高效开发能力和OpenHarmony的硬件协同优势。
具体到功能层面,这款App需要解决以下核心问题:
- 药品信息录入与管理(包括名称、类别、有效期、存量等)
- 用药提醒与过期预警
- 多成员用药记录与权限区分
- 数据在多设备间的安全同步
其中,"添加成员"功能是家庭场景下的关键需求。不同于个人用药管理,家庭场景需要区分父母、子女等不同成员的角色,根据年龄、健康状况分配不同的药品查看和操作权限。例如,儿童账户不应看到成人药品,而家庭管理员需要掌握所有成员的用药情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 Flutter与OpenHarmony的协同方案
Flutter for OpenHarmony是华为推出的官方适配方案,它通过以下方式实现融合:
- 使用Flutter Engine作为渲染基础
- 通过OpenHarmony的ACE引擎实现原生组件集成
- 利用OpenHarmony的分布式能力实现跨设备数据同步
在环境配置上需要特别注意:
bash复制# 安装Flutter OpenHarmony分支
git clone https://gitee.com/openharmony-sig/flutter_flutter.git -b openharmony
export PATH="$PATH:`pwd`/flutter_flutter/bin"
# 安装OHOS工具链
hb set # 选择项目
hb build # 编译原生部分
2.2 应用架构设计
采用分层架构保证可维护性:
code复制├── presentation_layer (Flutter UI)
│ ├── pages/
│ ├── widgets/
│ └── routing/
├── business_logic_layer
│ ├── providers/
│ ├── services/
│ └── models/
└── data_layer
├── local_db/ (使用OpenHarmony的RDB)
├── sync_engine/ (分布式数据同步)
└── api/
关键设计决策:
- 使用Provider进行状态管理,平衡简单性和功能性
- 本地存储采用OpenHarmony的关系型数据库(RDB),而非Flutter常用的SQLite
- 跨设备同步使用OpenHarmony的分布式数据管理服务
3. 核心功能实现详解
3.1 药品管理模块
药品数据模型设计:
dart复制class Medicine {
final String id;
final String name;
final MedicineType type; // 处方药/OTC/保健品等
final DateTime expiryDate;
final int remaining;
final String ownerId; // 关联成员ID
// ...其他字段
}
关键实现要点:
- 条形码扫描使用flutter_barcode_scanner插件
- 有效期提醒采用WorkManager实现后台检查
- 存量预警设置阈值自动通知
注意:OpenHarmony后台任务需要特别申请ohos.permission.KEEP_BACKGROUND_RUNNING权限
3.2 成员管理实现
成员添加的完整流程:
- 前端表单收集信息(姓名、关系、头像、健康备注等)
- 权限分配(查看/编辑/管理员)
- 数据验证与本地存储
- 分布式同步到其他设备
核心代码片段:
dart复制Future<void> addFamilyMember(FamilyMember member) async {
// 1. 本地存储
final rdb = await RdbHelper.instance.database;
await rdb.insert('members', member.toMap());
// 2. 分布式同步
try {
final syncEngine = DistributedSyncEngine();
await syncEngine.syncData(
key: 'member_${member.id}',
data: member.toJson(),
strategy: SyncStrategy.ALL_DEVICES
);
} catch (e) {
logger.e('分布式同步失败: $e');
// 重试逻辑...
}
}
权限控制设计:
dart复制enum MemberRole {
child, // 仅查看自己的药品
elder, // 查看自己和孩子的药品
guardian, // 查看所有成员药品
admin // 完全管理权限
}
4. OpenHarmony特性深度集成
4.1 分布式设备协同
利用OpenHarmony的分布式能力实现:
- 手机添加药品后自动同步到智能药箱设备
- 手表接收用药提醒
- 电视大屏查看家庭用药报告
关键API调用:
dart复制// 获取设备列表
final devices = await DeviceManager.getTrustedDevices();
// 发送数据到指定设备
await DistributedDataManager.sendData(
deviceId: targetDeviceId,
data: {'type': 'medicine_add', 'payload': medicineJson}
);
4.2 硬件能力调用
通过FFI调用OpenHarmony原生能力:
- 使用NFC读取药品电子标签
- 调用摄像头进行药品识别
- 利用生物识别进行用药确认
集成示例:
c复制// native/medicine_recognizer.cpp
OHOS::AI::MedicineRecognizer::Result Recognize(const std::string& imagePath) {
// 调用OpenHarmony AI框架实现药品识别
}
5. 实战中的挑战与解决方案
5.1 Flutter与原生平台通信优化
初期性能问题:频繁的Platform Channel调用导致UI卡顿
优化方案:
- 批量处理通信数据
- 使用dart:ffi直接调用轻量级API
- 重要操作采用异步回调
性能对比:
| 方案 | 平均延迟 | 内存占用 |
|---|---|---|
| MethodChannel | 120ms | 较高 |
| FFI | 15ms | 低 |
| EventChannel | 80ms | 中等 |
5.2 分布式数据一致性保障
遇到的边界情况:
- 网络中断时的数据冲突
- 多设备同时修改同一药品信息
- 新设备加入时的全量同步
我们的解决方案:
- 采用CRDT(无冲突复制数据类型)设计数据结构
- 实现基于时间戳的最终一致性
- 关键操作添加操作日志用于恢复
5.3 安全性实践
医疗数据安全至关重要,我们实施了:
- 数据传输使用OpenHarmony的分布式安全通道
- 本地存储加密采用OHOS的HUKS模块
- 敏感操作需要生物认证
- 定期安全审计日志
权限声明示例:
json复制// config.json
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC",
"reason": "同步药品数据到家庭设备"
},
{
"name": "ohos.permission.ACCESS_BIOMETRIC",
"reason": "用药确认身份验证"
}
]
6. 项目扩展与优化方向
当前成果:
- 已完成基础药箱管理和成员功能
- 实现跨3种设备类型协同
- 核心页面加载时间<300ms
后续计划:
- 智能推荐:基于用药记录推荐相似药品
- 紧急联络:一键联系家庭医生或药店
- 健康报告:生成家庭成员健康趋势分析
- 语音交互:支持语音查询和提醒
性能优化TODO:
- 预加载常用药品数据
- 采用Isolate处理大数据量同步
- 实现差异化的数据同步策略
在开发过程中,我们发现Flutter for OpenHarmony的文档相对较少,很多特性需要深入源码研究。建议开发者:
- 仔细阅读Flutter的OHOS适配层代码
- 加入OpenHarmony的SIG组获取支持
- 对关键功能编写完备的单元测试
- 使用DevEco Studio进行联合调试
