Flutter 框架跨平台鸿蒙开发 - 急救指南应用
急救指南应用简介 急救指南是一款紧急情况指导工具,提供心肺复苏、止血、烧伤等10类急救场景的图文/视频指导。核心功能包括分步骤急救指引、紧急求助定位和联系人管理。应用采用Flutter开发,遵循Material Design 3规范,支持鸿蒙OS/Web平台。数据模型包含急救类型、步骤指导和联系人信息,通过清晰枚举分类实现危急救护场景的快速响应。典型如心肺复苏功能分"确认安全-呼叫急救-
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图





1.1 应用简介
急救指南是一款紧急情况急救指导工具,提供图文指导、视频指导和定位求助功能,关键时刻可以救命。应用涵盖心肺复苏、止血、烧伤、骨折、窒息、溺水、中毒等多种急救场景,帮助用户在紧急情况下快速获取正确的急救知识。
应用核心理念:掌握急救技能,关键时刻拯救生命。
在紧急情况下,每一秒都至关重要。正确的急救措施可以在专业救援到达之前挽救生命。急救指南应用将专业的急救知识以简洁易懂的方式呈现,让每个人都能成为生命的守护者。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 急救项目 | 分类展示各种急救场景 | 列表展示 |
| 步骤指导 | 图文并茂的急救步骤 | 分步卡片 |
| 视频指导 | 视频演示急救操作 | 视频播放器 |
| 紧急求助 | 一键呼叫急救电话 | 弹窗确认 |
| 定位功能 | 获取当前位置信息 | 定位服务 |
| 紧急联系 | 管理紧急联系人 | 列表管理 |
| 知识库 | 急救知识学习 | 文章列表 |
1.3 急救类型
| 序号 | 类型 | Emoji | 描述 | 危急程度 |
|---|---|---|---|---|
| 1 | 心肺复苏 | ❤️ | 心脏骤停时的救命技术 | 危急 |
| 2 | 止血急救 | 🩸 | 控制出血的紧急处理 | 危急 |
| 3 | 烧伤处理 | 🔥 | 烧伤烫伤的急救方法 | 危急 |
| 4 | 窒息急救 | 😤 | 气道异物的紧急处理 | 危急 |
| 5 | 溺水急救 | 🌊 | 溺水者的抢救方法 | 危急 |
| 6 | 中毒急救 | ☠️ | 中毒的紧急处理 | 危急 |
| 7 | 骨折急救 | 🦴 | 骨折的固定与处理 | 一般 |
| 8 | 中暑急救 | ☀️ | 中暑的紧急处理 | 一般 |
| 9 | 癫痫发作 | 🧠 | 癫痫发作时的处理 | 一般 |
| 10 | 过敏反应 | 🤧 | 严重过敏的急救 | 一般 |
1.4 步骤类型
| 类型 | Emoji | 颜色 | 描述 |
|---|---|---|---|
| 警告 | ⚠️ | 红色 | 需要特别注意的事项 |
| 操作 | 👉 | 绿色 | 具体操作步骤 |
| 检查 | ✅ | 蓝色 | 需要检查确认的项目 |
| 注意 | 💡 | 黄色 | 补充说明和提示 |
1.5 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | setState | - |
| 导航控制 | TabController | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
二、项目结构
lib/
├── main_first_aid_guide.dart # 应用主入口(~1150行)
│ ├── FirstAidGuideApp # 根应用组件
│ ├── EmergencyType # 急救类型枚举
│ ├── StepType # 步骤类型枚举
│ ├── FirstAidStep # 急救步骤模型
│ ├── EmergencyContact # 紧急联系人模型
│ ├── FirstAidGuide # 急救指南模型
│ └── FirstAidGuideHomePage # 主页面
三、数据模型
3.1 急救类型枚举 (EmergencyType)
enum EmergencyType {
cpr('心肺复苏', '❤️', '心脏骤停时的救命技术', Color(0xFFE53935), true),
bleeding('止血急救', '🩸', '控制出血的紧急处理', Color(0xFFD32F2F), true),
burn('烧伤处理', '🔥', '烧伤烫伤的急救方法', Color(0xFFFF5722), true),
// ... 其他类型
final String label; // 类型名称
final String icon; // 代表图标
final String description; // 类型描述
final Color color; // 主题颜色
final bool isCritical; // 是否危急
}
3.2 步骤类型枚举 (StepType)
enum StepType {
warning('警告', '⚠️', Color(0xFFFF5252)),
action('操作', '👉', Color(0xFF4CAF50)),
check('检查', '✅', Color(0xFF2196F3)),
note('注意', '💡', Color(0xFFFFC107));
final String label; // 类型名称
final String icon; // 代表图标
final Color color; // 类型颜色
}
3.3 急救步骤模型 (FirstAidStep)
class FirstAidStep {
final String id; // 唯一标识
final int order; // 步骤顺序
final String title; // 步骤标题
final String description; // 步骤描述
final StepType type; // 步骤类型
final String? imageUrl; // 示意图URL
final String? videoUrl; // 视频URL
final int duration; // 预计时长(秒)
}
3.4 急救指南模型 (FirstAidGuide)
class FirstAidGuide {
final EmergencyType type; // 急救类型
final String overview; // 概述说明
final List<FirstAidStep> steps; // 步骤列表
final List<String> warnings; // 注意事项
final List<String> tips; // 小贴士
final int estimatedTime; // 预计时间(分钟)
}
3.5 紧急联系人模型 (EmergencyContact)
class EmergencyContact {
final String id; // 唯一标识
final String name; // 姓名
final String phone; // 电话
final String relationship; // 关系
final String avatar; // 头像Emoji
}
3.6 数据流转图
四、核心功能实现
4.1 心肺复苏指南
心肺复苏是最重要的急救技能:
FirstAidGuide _getCPRGuide() {
return FirstAidGuide(
type: EmergencyType.cpr,
overview: '心肺复苏(CPR)是心脏骤停时挽救生命的关键技术',
steps: [
FirstAidStep(
id: '1',
order: 1,
title: '确认安全',
description: '确保现场安全,检查患者意识',
type: StepType.check,
duration: 5,
),
FirstAidStep(
id: '2',
order: 2,
title: '呼叫急救',
description: '立即拨打120,或让他人拨打',
type: StepType.action,
duration: 10,
),
FirstAidStep(
id: '3',
order: 3,
title: '检查呼吸',
description: '观察胸廓起伏,不超过10秒',
type: StepType.check,
duration: 10,
),
FirstAidStep(
id: '4',
order: 4,
title: '开始按压',
description: '双手交叠,按压胸骨下半部,深度5-6cm,频率100-120次/分',
type: StepType.action,
duration: 120,
),
FirstAidStep(
id: '5',
order: 5,
title: '人工呼吸',
description: '按压30次后,进行2次人工呼吸',
type: StepType.action,
duration: 10,
),
],
warnings: ['不要在活人身上练习CPR', '按压中断时间不超过10秒'],
tips: ['按压时手臂伸直', '用身体重量按压'],
estimatedTime: 15,
);
}
4.2 海姆立克急救法
窒息急救的标准流程:
FirstAidGuide _getChokingGuide() {
return FirstAidGuide(
type: EmergencyType.choking,
overview: '气道异物梗阻是危及生命的紧急情况',
steps: [
FirstAidStep(
id: '1',
order: 1,
title: '识别窒息',
description: '患者无法说话、咳嗽或呼吸',
type: StepType.check,
duration: 5,
),
FirstAidStep(
id: '2',
order: 2,
title: '背部拍击',
description: '站立位,用掌根在肩胛骨之间拍击5次',
type: StepType.action,
duration: 30,
),
FirstAidStep(
id: '3',
order: 3,
title: '腹部冲击',
description: '站在患者身后,双手握拳在腹部上方冲击5次',
type: StepType.action,
duration: 30,
),
],
warnings: ['不要盲目用手指探取异物', '孕妇使用胸部冲击法'],
tips: ['鼓励患者咳嗽', '保持镇静'],
estimatedTime: 5,
);
}
4.3 紧急求助功能
void _callEmergency() {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Row(
children: [
Icon(Icons.phone, color: Colors.red),
Text('紧急求助'),
],
),
content: Column(
children: [
// 显示120急救电话
Text('🚨 120 急救电话'),
// 显示当前位置
Text('当前位置: $_currentLocation'),
// 显示紧急联系人
..._emergencyContacts.map((contact) =>
ListTile(
leading: CircleAvatar(child: Text(contact.avatar)),
title: Text(contact.name),
subtitle: Text(contact.phone),
trailing: IconButton(
icon: Icon(Icons.phone),
onPressed: () => _callContact(contact),
),
),
),
],
),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('取消'),
),
ElevatedButton(
onPressed: () => _dialEmergency(),
child: Text('拨打120'),
),
],
),
);
}
4.4 定位功能
void _refreshLocation() {
setState(() {
_isLocationLoading = true;
});
// 实际应用中应使用定位服务
Future.delayed(const Duration(seconds: 2), () {
setState(() {
_currentLocation = '北京市海淀区xxx路xxx号';
_isLocationLoading = false;
});
});
}
五、急救知识详解
5.1 心肺复苏 (CPR)
适应症:心脏骤停、呼吸停止
操作要点:
| 要点 | 标准 |
|---|---|
| 按压位置 | 胸骨下半部 |
| 按压深度 | 5-6厘米 |
| 按压频率 | 100-120次/分钟 |
| 按压呼吸比 | 30:2 |
| 中断时间 | 不超过10秒 |
流程图:
5.2 止血急救
出血类型:
| 类型 | 特征 | 处理方法 |
|---|---|---|
| 动脉出血 | 鲜红、喷射状 | 压迫止血点、止血带 |
| 静脉出血 | 暗红、持续流出 | 直接压迫、抬高伤肢 |
| 毛细血管出血 | 渗出、量少 | 直接压迫 |
止血步骤:
- 直接压迫止血
- 抬高伤肢
- 加压包扎
- 止血带(严重时)
5.3 烧伤处理
烧伤分级:
| 级别 | 特征 | 处理 |
|---|---|---|
| 一度 | 红肿、疼痛 | 冷水冲洗 |
| 二度 | 水泡、剧痛 | 冷水冲洗、保护创面 |
| 三度 | 焦黑、无痛 | 立即就医 |
急救原则:
- 冲:冷水冲洗15-20分钟
- 脱:小心去除衣物
- 泡:继续冷水浸泡
- 盖:干净纱布覆盖
- 送:严重烧伤送医
5.4 窒息急救
海姆立克急救法:
六、UI设计
6.1 色彩系统
应用以红色为主色调,强调紧急和警示:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 背景渐变1 | #B71C1C | 深红 |
| 背景渐变2 | #C62828 | 中红 |
| 背景渐变3 | #D32F2F | 浅红 |
| 主色调 | #E53935 | 红色 |
| 强调色 | #EF5350 | 浅红 |
| 文字主色 | #FFFFFF | 白色 |
6.2 页面结构
┌─────────────────────────────────────┐
│ 🚑 急救指南 [已定位] │ ← 标题栏
│ 关键时刻救命的工具 │
├─────────────────────────────────────┤
│ [急救项目] [步骤指导] [紧急联系] [知识库]│
├─────────────────────────────────────┤
│ ⚠️ 紧急情况?点击右下角按钮立即求助 │ ← 提示
├─────────────────────────────────────┤
│ 危急情况 │
│ ┌─────────────────────────────┐ │
│ │ ❤️ 心肺复苏 [危急] │ │
│ │ 心脏骤停时的救命技术 │ ← 急救卡片
│ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ 🩸 止血急救 [危急] │ │
│ │ 控制出血的紧急处理 │ │
│ └─────────────────────────────┘ │
├─────────────────────────────────────┤
│ [📞 紧急求助] │ ← 浮动按钮
└─────────────────────────────────────┘
6.3 步骤指导页面
┌─────────────────────────────────────┐
│ ❤️ 心肺复苏 预计15分钟 │
│ 心肺复苏是心脏骤停时挽救生命... │
├─────────────────────────────────────┤
│ 步骤 1/6 17% │
│ ████████░░░░░░░░░░░░░░░░░░░░░░░ │
├─────────────────────────────────────┤
│ ┌─────────────────────────────┐ │
│ │ [⚠️ 警告] ⏱ 5秒 │ │
│ │ ① 确认安全 │ │
│ │ 确保现场安全,检查患者意识 │ │
│ │ ┌───────────────────────┐ │ │
│ │ │ [示意图] │ │ │
│ │ └───────────────────────┘ │ │
│ └─────────────────────────────┘ │
├─────────────────────────────────────┤
│ [▶ 播放] 视频指导 │
├─────────────────────────────────────┤
│ [← 上一步] [下一步 →] │
├─────────────────────────────────────┤
│ ⚠️ 注意事项 │
│ • 不要在活人身上练习CPR │
│ • 按压中断时间不超过10秒 │
└─────────────────────────────────────┘
6.4 交互设计
| 交互元素 | 触发方式 | 响应行为 |
|---|---|---|
| 急救卡片 | 点击 | 进入步骤指导 |
| 下一步 | 点击 | 显示下一步骤 |
| 上一步 | 点击 | 显示上一步骤 |
| 紧急求助 | 点击 | 打开求助弹窗 |
| 定位刷新 | 点击 | 更新当前位置 |
| 拨打电话 | 点击 | 拨打急救电话 |
七、状态管理
7.1 状态分类
| 状态类型 | 状态名称 | 说明 |
|---|---|---|
| 当前指南 | _selectedGuide |
当前选择的急救指南 |
| 步骤索引 | _currentStepIndex |
当前步骤序号 |
| 视频状态 | _isPlayingVideo |
视频播放状态 |
| 紧急联系人 | _emergencyContacts |
紧急联系人列表 |
| 当前位置 | _currentLocation |
当前定位信息 |
| 定位状态 | _isLocationLoading |
定位加载状态 |
7.2 状态流转
八、安全考虑
8.1 数据安全
8.2 紧急情况处理
| 情况 | 处理方式 |
|---|---|
| 定位失败 | 显示上次位置或手动输入 |
| 网络断开 | 使用离线数据 |
| 应用崩溃 | 快速重启恢复 |
8.3 免责声明
应用提供的急救知识仅供参考,实际急救操作应:
- 以专业医疗人员指导为准
- 参加正规急救培训
- 根据实际情况灵活处理
- 及时呼叫专业救援
九、性能优化
9.1 渲染优化
| 优化点 | 实现方式 | 效果 |
|---|---|---|
| 列表渲染 | ListView | 按需渲染 |
| Tab切换 | TabController | 平滑切换 |
| 图片加载 | 占位图 | 避免闪烁 |
| 状态更新 | setState局部 | 减少重绘 |
9.2 内存管理
void dispose() {
_tabController.dispose();
super.dispose();
}
9.3 性能指标
| 指标 | 目标值 | 实测值 |
|---|---|---|
| 列表滚动 | 60fps | 60fps |
| 页面切换 | < 300ms | 待测试 |
| 内存占用 | < 50MB | 待测试 |
| 启动时间 | < 2s | 待测试 |
十、常见问题
10.1 问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 定位失败 | 权限未授予 | 检查定位权限 |
| 视频无法播放 | 网络问题 | 检查网络连接 |
| 联系人无法添加 | 存储权限 | 检查存储权限 |
| 应用闪退 | 内存不足 | 清理后台应用 |
10.2 调试技巧
// 打印当前状态
debugPrint('Selected guide: ${_selectedGuide?.type.label}');
debugPrint('Current step: $_currentStepIndex');
debugPrint('Location: $_currentLocation');
debugPrint('Contacts: ${_emergencyContacts.length}');
十一、运行说明
11.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
11.2 运行命令
# 查看可用设备
flutter devices
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_first_aid_guide.dart
# 运行到Web服务器
flutter run -d web-server -t lib/main_first_aid_guide.dart --web-port 8134
# 运行到Windows
flutter run -d windows -t lib/main_first_aid_guide.dart
# 代码分析
flutter analyze lib/main_first_aid_guide.dart
十二、扩展建议
12.1 功能扩展
| 功能 | 优先级 | 实现思路 |
|---|---|---|
| 真实定位 | 高 | 集成定位服务 |
| 真实视频 | 高 | 接入视频资源 |
| 离线模式 | 中 | 本地数据缓存 |
| 语音指导 | 中 | TTS语音播报 |
| AI诊断 | 低 | 症状分析功能 |
12.2 设计扩展
| 方向 | 描述 |
|---|---|
| 夜间模式 | 深色主题 |
| 大字体 | 无障碍设计 |
| 语音播报 | 语音指导 |
| 震动反馈 | 操作确认 |
12.3 技术扩展
十三、总结
急救指南应用通过专业的急救知识和便捷的操作界面,帮助用户在紧急情况下快速获取正确的急救指导。应用核心亮点包括:
13.1 核心特色
- 10种急救类型:覆盖常见紧急情况
- 分步指导:图文并茂的急救步骤
- 视频演示:直观的操作演示
- 紧急求助:一键呼叫急救电话
- 定位功能:快速获取当前位置
- 紧急联系人:管理重要联系人
13.2 技术亮点
- 枚举类型设计:急救类型、步骤类型使用枚举
- 分步导航:清晰的步骤进度展示
- 紧急功能:一键求助快速响应
- 状态管理:清晰的页面状态流转
13.3 社会价值
急救指南不仅是一个工具应用,更是一个可能挽救生命的平台。通过普及急救知识,让更多人掌握急救技能,在关键时刻能够伸出援手,挽救生命。
掌握急救技能,关键时刻拯救生命!
愿每个人都能成为生命的守护者 🚑
更多推荐




所有评论(0)