资讯动态

Flutter+OpenHarmony开发家庭药箱管理App实践

发布时间:2026/9/15 2:22:14 来源:尧图企业网站定制
1. 项目背景与需求分析家庭药箱管理是每个家庭都需要的实用功能特别是对于有老人、儿童或慢性病患者的家庭。传统纸质记录方式存在易丢失、难查询、无法提醒等问题。基于Flutter和OpenHarmony开发跨平台家庭药箱管理App能够解决以下痛点药品信息分散家中常备药、处方药、保健品等信息分散在不同包装上有效期管理困难经常出现过期药品未及时清理的情况用药提醒缺失特殊用药时间如每8小时一次容易遗漏知识获取不便药品相互作用、禁忌等专业信息难以快速查询本项目将实现核心功能模块药品信息录入扫码/手动有效期提醒提前30天预警用药计划设置周期性提醒药品知识库常见药物说明家庭成员用药档案2. 技术选型与架构设计2.1 FlutterOpenHarmony技术栈优势选择Flutter for OpenHarmony方案主要基于开发效率一套代码同时运行在HarmonyOS和Android/iOS设备性能表现Skia渲染引擎保证UI流畅度实测列表滚动FPS≥60生态兼容通过FFI调用OpenHarmony原生能力如分布式数据库维护成本统一代码库减少多平台适配工作量技术架构分为三层应用层Dart ├── 业务逻辑 ├── 状态管理 └── UI组件 框架层Flutter Engine ├── Skia渲染 └── Platform Channels 系统层OpenHarmony ├── 分布式数据 └── 通知服务2.2 关键组件选型状态管理Riverpod比Provider更简洁的语法本地存储Hive高性能NoSQL数据库网络请求Dio支持拦截器和文件上传扫码功能mobile_scanner优化过的相机控制日期处理Jiffy支持中文本地化注意OpenHarmony环境需要额外配置ohos_mobile_scanner插件解决鸿蒙相机权限问题3. 核心功能实现细节3.1 药品信息录入模块3.1.1 扫码录入实现final scannerController MobileScannerController( detectionSpeed: DetectionSpeed.normal, facing: CameraFacing.back, ); Widget buildScanner() { return MobileScanner( controller: scannerController, onDetect: (capture) { final barcode capture.barcodes.first; if (barcode.rawValue ! null) { _fetchDrugInfo(barcode.rawValue!); // 调用药品API } }, ); }常见问题处理光线不足时增加对比度controller.toggleTorch()条码破损时手动输入备用方案国产药品条码兼容性测试需特别测试69开头码3.1.2 表单验证逻辑final _formKey GlobalKeyFormState(); TextFormField( validator: (value) { if (value null || value.isEmpty) return 必填字段; if (!RegExp(r^[\u4e00-\u9fa5a-zA-Z0-9]$).hasMatch(value)) { return 不能包含特殊字符; } return null; }, )特殊字段处理有效期必须大于当前日期规格自动补全单位如500mg批号校验符合GMP规范格式3.2 智能提醒系统3.2.1 提醒算法设计void scheduleReminders(Drug drug) { final now DateTime.now(); final expireDays drug.expiryDate.difference(now).inDays; if (expireDays 30) { _setNotification( title: 药品即将过期, body: ${drug.name}将在$expireDays天后过期, scheduledDate: drug.expiryDate.subtract(const Duration(days: 7)), ); } drug.usage.forEach((time) { _setDailyReminder( drugName: drug.name, dosage: time.dosage, hour: time.hour, minute: time.minute, ); }); }优化点节假日用药提醒延后1小时已读提醒自动标记为完成紧急药品如急救药使用红色预警3.2.2 OpenHarmony分布式提醒通过ohos.distributedHardware.deviceManager实现注册设备状态监听跨设备同步提醒状态手机/手表/平板多端提醒// OpenHarmony侧代码 deviceManager.on(deviceStateChange, (data) { if (data.deviceState online) { syncReminders(data.deviceId); } });3.3 药品知识库建设3.3.1 数据结构设计class DrugKnowledge { final String id; final String genericName; // 通用名 final String tradeNames; // 商品名多个用逗号分隔 final String category; // 处方/OTC/保健品 final String indications; // 适应症 final String contraindications; // 禁忌 final String interactions; // 相互作用 final String sideEffects; // 副作用 final String dosage; // 用法用量 final String storage; // 存储条件 }3.3.2 本地搜索优化使用Hive的全文检索功能final knowledgeBox await Hive.openBoxDrugKnowledge(knowledge); final results knowledgeBox.values.where((item) { return item.genericName.contains(query) || item.tradeNames.split(,).any((name) name.contains(query)); }).toList();性能优化技巧建立拼音索引如布洛芬对应buluofen热门药品缓存到内存相似药品推荐算法4. 界面设计与用户体验4.1 主界面布局方案采用瀑布流卡片式设计GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, childAspectRatio: 0.8, ), itemBuilder: (context, index) { return DrugCard( drug: _drugs[index], onTap: () _showDetail(_drugs[index]), ); }, )视觉优化点过期药品卡片自动变灰3天内到期药品显示红色边框常用药品置顶显示4.2 深色模式适配ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: Colors.blue, brightness: Brightness.dark, // 自动切换 ), useMaterial3: true, )关键颜色变量药品分类色标紧急程度色阶交互状态反馈色5. 测试与性能优化5.1 关键测试用例测试类型测试场景预期结果功能测试扫码已过期药品显示红色警告标志性能测试加载1000条记录滚动流畅55FPS兼容测试鸿蒙2.0/3.0设备功能正常无崩溃安全测试输入特殊字符自动过滤HTML标签5.2 性能优化实践图片缓存使用cached_network_image插件CachedNetworkImage( imageUrl: drug.imageUrl, placeholder: (_, __) const ProgressIndicator(), )列表优化ListView.builderAutomaticKeepAlive数据库索引对常用查询字段建立Hive索引内存管理Dispose所有Controller6. 项目部署与发布6.1 OpenHarmony适配要点修改build.gradleohos { compileSdkVersion 8 defaultConfig { compatibleSdkVersion 8 } }添加鸿蒙权限声明abilities ability ohos:name.MainAbility ohos:typepage ohos:distributedNotificationEnabledtrue/ /abilities6.2 多平台打包策略使用同一代码库生成不同平台包# 构建APK flutter build apk --target-platform android-arm64 # 构建HarmonyOS包 flutter build ohos --release实测数据APK大小18.6MBHAP大小22.3MB含ARM库冷启动时间1.2s7. 扩展功能与未来迭代智能推荐基于用药记录推荐常备药家庭共享通过分布式数据库同步数据语音交互集成鸿蒙语音SDK应急指南常见急症处理流程图实际开发中发现几个值得注意的点鸿蒙相机API需要单独处理权限分布式数据库同步存在200ms左右延迟药品条码库需要定期更新建议每月同步老年模式需要特别加大字体和按钮这个项目最让我意外的是Flutter在OpenHarmony上的性能表现在搭载HarmonyOS 3.0的MatePad上列表滚动性能甚至优于同配置Android设备。未来考虑用FFI直接调用鸿蒙的AI引擎来实现更智能的用药建议。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价