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

一、项目概述

运行效果图

image-20260408222749157

image-20260408222757752

image-20260408222802710

image-20260408222807900

image-20260408222812897

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秒

流程图

发现患者

有意识?

观察等待

呼叫120

有呼吸?

侧卧位等待

开始CPR

胸外按压30次

人工呼吸2次

恢复呼吸?

侧卧位观察

5.2 止血急救

出血类型

类型 特征 处理方法
动脉出血 鲜红、喷射状 压迫止血点、止血带
静脉出血 暗红、持续流出 直接压迫、抬高伤肢
毛细血管出血 渗出、量少 直接压迫

止血步骤

  1. 直接压迫止血
  2. 抬高伤肢
  3. 加压包扎
  4. 止血带(严重时)

5.3 烧伤处理

烧伤分级

级别 特征 处理
一度 红肿、疼痛 冷水冲洗
二度 水泡、剧痛 冷水冲洗、保护创面
三度 焦黑、无痛 立即就医

急救原则

  • 冲:冷水冲洗15-20分钟
  • 脱:小心去除衣物
  • 泡:继续冷水浸泡
  • 盖:干净纱布覆盖
  • 送:严重烧伤送医

5.4 窒息急救

海姆立克急救法

清醒

意识丧失

识别窒息

患者状态

背部拍击5次

腹部冲击5次

异物排出?

成功

开始CPR


六、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 免责声明

应用提供的急救知识仅供参考,实际急救操作应:

  1. 以专业医疗人员指导为准
  2. 参加正规急救培训
  3. 根据实际情况灵活处理
  4. 及时呼叫专业救援

九、性能优化

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 技术扩展

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 急救指南 步骤指导 紧急求助 真实定位 视频资源 离线模式 语音指导 AI诊断 社区功能 V1.0 基础版本 V1.1 增强版本 V1.2 智能版本 急救指南应用开发计划

十三、总结

急救指南应用通过专业的急救知识和便捷的操作界面,帮助用户在紧急情况下快速获取正确的急救指导。应用核心亮点包括:

13.1 核心特色

  1. 10种急救类型:覆盖常见紧急情况
  2. 分步指导:图文并茂的急救步骤
  3. 视频演示:直观的操作演示
  4. 紧急求助:一键呼叫急救电话
  5. 定位功能:快速获取当前位置
  6. 紧急联系人:管理重要联系人

13.2 技术亮点

  • 枚举类型设计:急救类型、步骤类型使用枚举
  • 分步导航:清晰的步骤进度展示
  • 紧急功能:一键求助快速响应
  • 状态管理:清晰的页面状态流转

13.3 社会价值

急救指南不仅是一个工具应用,更是一个可能挽救生命的平台。通过普及急救知识,让更多人掌握急救技能,在关键时刻能够伸出援手,挽救生命。

掌握急救技能,关键时刻拯救生命!


愿每个人都能成为生命的守护者 🚑


Logo

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

更多推荐