在这里插入图片描述

养猫难免遇到紧急情况,提前了解一些急救知识很有必要。今天来实现一个急救指南功能,列出常见的紧急情况,包括症状识别和应急处理方法。

一、急救数据定义

用列表存储各种紧急情况:

final List<Map<String, dynamic>> _emergencies = const [
  {
    'title': '中毒',
    'icon': Icons.warning,
    'color': Colors.red,
    'symptoms': '呕吐、腹泻、流涎、抽搐、呼吸困难',
    'actions': [
      '立即带猫咪远离毒源',
      '不要自行催吐',
      '记录可能的毒物名称',
      '立即送医',
    ],
  },

每种情况包含标题、图标、颜色、症状和处理步骤。
中毒用红色警告,是最紧急的情况之一。

外伤和骨折:

{
  'title': '外伤出血',
  'icon': Icons.healing,
  'color': Colors.orange,
  'symptoms': '伤口出血、疼痛、舔舐伤口',
  'actions': [
    '用干净纱布按压止血',
    '不要使用酒精消毒',
    '防止猫咪舔舐伤口',
    '尽快就医',
  ],
},
{
  'title': '骨折',
  'icon': Icons.accessibility_new,
  'color': Colors.purple,
  'symptoms': '跛行、肿胀、不愿移动、疼痛',
  'actions': [
    '尽量不要移动猫咪',
    '用毛巾轻轻包裹固定',
    '不要尝试复位',
    '立即送医',
  ],
},

外伤提醒不要用酒精,会刺激伤口。
骨折强调不要自己复位,容易造成二次伤害。

呼吸困难和中暑:

{
  'title': '呼吸困难',
  'icon': Icons.air,
  'color': Colors.blue,
  'symptoms': '张口呼吸、呼吸急促、嘴唇发紫',
  'actions': [
    '保持环境通风',
    '不要强迫猫咪躺下',
    '减少刺激和压力',
    '紧急送医',
  ],
},
{
  'title': '中暑',
  'icon': Icons.wb_sunny,
  'color': Colors.amber,
  'symptoms': '喘气、流涎、虚弱、体温升高',
  'actions': [
    '移至阴凉处',
    '用湿毛巾擦拭身体',
    '提供少量饮水',
    '尽快就医',
  ],
},

猫咪张口呼吸是危险信号,正常猫不会这样。
中暑要降温但不能用冰水,温差太大会休克。

抽搐和尿道阻塞:

{
  'title': '抽搐/癫痫',
  'icon': Icons.flash_on,
  'color': Colors.indigo,
  'symptoms': '全身抽搐、意识丧失、口吐白沫',
  'actions': [
    '移开周围危险物品',
    '不要强行按住猫咪',
    '记录发作时间',
    '发作后立即就医',
  ],
},
{
  'title': '尿道阻塞',
  'icon': Icons.block,
  'color': Colors.teal,
  'symptoms': '频繁蹲厕、无尿或少尿、嚎叫',
  'actions': [
    '这是紧急情况!',
    '不要按压腹部',
    '立即送医',
    '24小时内可能致命',
  ],
},

抽搐时不要按住猫咪,会造成伤害。
尿道阻塞是公猫常见急症,24 小时内可能致命。

误食异物:

{
  'title': '误食异物',
  'icon': Icons.no_food,
  'color': Colors.brown,
  'symptoms': '呕吐、不吃东西、腹痛',
  'actions': [
    '不要自行催吐',
    '记录可能吞食的物品',
    '观察是否有呕吐物',
    '尽快就医检查',
  ],
},

误食异物不要催吐,尖锐物品可能划伤食道。
记录吞食的东西,方便医生判断。

二、页面整体结构

顶部警告提示:


Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: const Text('急救指南'),
      backgroundColor: Colors.red,
    ),
    body: Column(
      children: [
        Container(
          padding: EdgeInsets.all(16.w),
          color: Colors.red[50],
          child: Row(
            children: [
              Icon(Icons.emergency, color: Colors.red, size: 24.sp),
              SizedBox(width: 12.w),
              Expanded(
                child: Text(
                  '紧急情况请立即联系宠物医院!\n以下指南仅供参考,不能替代专业医疗。',
                  style: TextStyle(fontSize: 13.sp, color: Colors.red[800]),
                ),
              ),
            ],
          ),
        ),

AppBar 用红色,强调这是紧急相关的页面。
顶部提示用户要联系医院,指南只是参考。

列表区域:

Expanded(
  child: ListView.builder(
    padding: EdgeInsets.all(16.w),
    itemCount: _emergencies.length,
    itemBuilder: (context, index) => _buildEmergencyCard(_emergencies[index]),
  ),
),

Expanded 让列表占满剩余空间。
ListView.builder 按需构建,性能好。

三、急救卡片组件

用 ExpansionTile 展开详情:

Widget _buildEmergencyCard(Map<String, dynamic> emergency) {
  return Card(
    margin: EdgeInsets.only(bottom: 12.h),
    child: ExpansionTile(
      leading: CircleAvatar(
        backgroundColor: (emergency['color'] as Color).withOpacity(0.1),
        child: Icon(emergency['icon'], color: emergency['color'], size: 24.sp),
      ),
      title: Text(
        emergency['title'],
        style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16.sp),
      ),

每种情况配不同颜色和图标,一眼能区分。
标题加粗,是卡片的主要信息。

展开后的内容:

children: [
  Padding(
    padding: EdgeInsets.all(16.w),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text('症状表现', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.grey[700])),
        SizedBox(height: 4.h),
        Text(emergency['symptoms'], style: TextStyle(fontSize: 13.sp)),
        SizedBox(height: 12.h),
        Text('应急措施', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.grey[700])),
        SizedBox(height: 4.h),

分两部分:症状表现和应急措施。
小标题用灰色加粗,和内容区分。

应急措施列表:

...(emergency['actions'] as List<String>).map((action) => Padding(
  padding: EdgeInsets.only(bottom: 4.h),
  child: Row(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      Icon(Icons.check_circle, size: 16.sp, color: emergency['color']),
      SizedBox(width: 8.w),
      Expanded(child: Text(action, style: TextStyle(fontSize: 13.sp))),
    ],
  ),
)),

用展开运算符 ... 把 map 结果展开。
每条措施前面有个勾选图标,用对应的颜色。

四、图标选择的考量

每种情况配合适的图标:

'icon': Icons.warning,           // 中毒 - 警告
'icon': Icons.healing,           // 外伤 - 创可贴
'icon': Icons.accessibility_new, // 骨折 - 人形
'icon': Icons.air,               // 呼吸困难 - 空气
'icon': Icons.wb_sunny,          // 中暑 - 太阳
'icon': Icons.flash_on,          // 抽搐 - 闪电
'icon': Icons.block,             // 尿道阻塞 - 禁止
'icon': Icons.no_food,           // 误食 - 禁止食物

图标要和情况语义匹配。
用户看图标就能大概知道是什么情况。

五、颜色的紧急程度

颜色选择有讲究:

'color': Colors.red,    // 中毒 - 最紧急
'color': Colors.orange, // 外伤 - 紧急
'color': Colors.teal,   // 尿道阻塞 - 紧急
'color': Colors.amber,  // 中暑 - 需要处理
'color': Colors.blue,   // 呼吸困难 - 需要关注

红色和橙色表示最紧急的情况。
颜色深浅暗示紧急程度。

六、警告提示的设计

顶部固定提示:

Container(
  padding: EdgeInsets.all(16.w),
  color: Colors.red[50],
  child: Row(
    children: [
      Icon(Icons.emergency, color: Colors.red, size: 24.sp),
      SizedBox(width: 12.w),
      Expanded(
        child: Text(
          '紧急情况请立即联系宠物医院!\n以下指南仅供参考,不能替代专业医疗。',

背景用浅红色,和列表区分。
文字用深红色,醒目但不刺眼。

为什么要加这个提示:

急救指南只是应急参考,不能替代专业医疗。
避免用户过度依赖 App 而延误就医。

七、列表项的交互

ExpansionTile 的优势:

ExpansionTile(
  leading: ...,
  title: ...,
  children: [...],
)

点击整行都能展开,操作区域大。
自带展开收起动画,体验流畅。

展开状态管理:

ExpansionTile 内部维护状态,不需要手动管理。
多个卡片可以同时展开,方便对比。

八、应急措施的展示

用列表而不是纯文本:

'actions': [
  '立即带猫咪远离毒源',
  '不要自行催吐',
  '记录可能的毒物名称',
  '立即送医',
],

分步骤列出,用户按顺序操作。
比一大段文字更容易阅读和执行。

每条措施带图标:

Row(
  children: [
    Icon(Icons.check_circle, size: 16.sp, color: emergency['color']),
    SizedBox(width: 8.w),
    Expanded(child: Text(action, ...)),
  ],
)

勾选图标暗示这是待办事项。
颜色和卡片主题色一致。

九、crossAxisAlignment 的作用

设为 start 的原因:

Row(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    Icon(...),
    Expanded(child: Text(action, ...)),
  ],
)

如果措施文字换行,图标和第一行对齐。
不设的话图标会垂直居中,看起来怪。

十、页面布局的层次

整体结构:

Scaffold(
  appBar: AppBar(...),  // 红色标题栏
  body: Column(
    children: [
      Container(...),   // 顶部警告
      Expanded(
        child: ListView.builder(...),  // 急救列表
      ),
    ],
  ),
)

Column 让警告和列表垂直排列。
Expanded 让列表占满剩余空间。

小结

急救指南是个实用功能,关键时刻能帮上忙。UI 上用红色主题强调紧急性,顶部固定警告提示用户要联系医院。每种情况用 ExpansionTile 展开详情,包含症状识别和分步骤的应急措施。数据结构用 Map 列表,每种情况配不同颜色和图标,视觉上容易区分。希望大家的猫咪都健健康康,用不上这个功能。


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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐