宠物健康监测应用


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

一、项目概述

运行效果图

image-20260410182818271

image-20260410182822951

image-20260410182827023

image-20260410182831082

1.1 应用简介

宠物健康监测是一款专业的宠物健康管理工具应用,通过智能监测宠物的日常行为、食量变化、睡眠质量等关键健康指标,及时发现健康异常并提醒主人。应用内置健康数据分析引擎,支持在线咨询专业兽医,为宠物提供全方位的健康守护。

应用以清新的绿色为主色调,象征健康与活力。涵盖健康概览、行为监测、在线咨询、健康档案四大模块。用户可以实时查看宠物健康状态、记录日常行为、获取专业建议、管理健康档案,让宠物健康管理更加科学便捷。

1.2 核心功能

功能模块 功能描述 实现方式
健康概览 实时健康评分与趋势 数据可视化
行为监测 活动量、运动轨迹记录 传感器数据
食量监测 进食时间、食量统计 手动记录
睡眠监测 睡眠时长、质量分析 时间记录
异常提醒 健康异常智能预警 规则引擎
在线咨询 专业兽医在线问答 即时通讯
健康档案 疫苗、体检记录管理 数据存储
健康报告 周期性健康分析报告 报告生成

1.3 宠物类型定义

序号 宠物类型 Emoji 描述
1 狗狗 🐕 活泼好动,需要充足运动
2 猫咪 🐱 优雅独立,睡眠时间长
3 兔子 🐰 温顺可爱,饮食需注意
4 仓鼠 🐹 夜行性,活动量大
5 鸟类 🐦 敏感活泼,需要互动
6 其他 🐾 其他类型宠物

1.4 健康指标定义

序号 指标名称 Emoji 正常范围 单位
1 活动量 🏃 30-120 分钟/天
2 食量 🍖 体重2%-4% 克/天
3 睡眠时长 😴 12-16 小时/天
4 饮水量 💧 50-100 毫升/公斤
5 体重 ⚖️ 品种标准 公斤
6 心率 ❤️ 60-140 次/分钟

1.5 健康状态定义

序号 状态名称 Emoji 健康评分 描述
1 优秀 🌟 90-100 各项指标完美
2 良好 😊 70-89 整体状态健康
3 一般 😐 50-69 需要关注调整
4 较差 😟 30-49 建议就医检查
5 危险 🚨 0-29 立即就医

1.6 异常类型定义

序号 异常类型 Emoji 触发条件 严重程度
1 食欲不振 🍽️ 食量下降>30% 中等
2 活动减少 🛋️ 活动量下降>40% 中等
3 睡眠异常 💤 睡眠时长异常 轻微
4 体重变化 ⚖️ 体重波动>10% 严重
5 饮水异常 💧 饮水量异常 中等
6 行为异常 🎭 行为模式突变 严重

1.7 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
状态管理 Provider >= 6.0.0
数据存储 SharedPreferences >= 2.0.0
图表库 FL Chart >= 0.55.0
目标平台 鸿蒙OS / Web API 21+

1.8 项目结构

lib/
└── main_pet_health_monitor.dart
    ├── PetHealthMonitorApp              # 应用入口
    ├── PetType                          # 宠物类型枚举
    ├── HealthIndicator                  # 健康指标枚举
    ├── HealthStatus                     # 健康状态枚举
    ├── AlertType                        # 异常类型枚举
    ├── Pet                              # 宠物模型
    ├── HealthRecord                     # 健康记录模型
    ├── BehaviorRecord                   # 行为记录模型
    ├── Consultation                     # 咨询记录模型
    ├── PetHealthMonitorHomePage         # 主页面(底部导航)
    ├── _buildOverviewPage               # 健康概览页
    ├── _buildMonitorPage                # 行为监测页
    ├── _buildConsultPage                # 在线咨询页
    ├── _buildProfilePage                # 健康档案页
    ├── HealthScorePainter               # 健康评分绘制器
    └── TrendChartPainter                # 趋势图表绘制器

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
PetHealthMonitorHomePage

概览页

监测页

咨询页

档案页

健康评分

指标趋势

异常提醒

行为记录

食量记录

睡眠记录

兽医列表

在线聊天

宠物信息

疫苗记录

体检记录

健康分析引擎
HealthAnalyzer

异常检测器
AlertDetector

报告生成器
ReportGenerator

Pet
宠物信息

HealthRecord
健康记录

BehaviorRecord
行为记录

Consultation
咨询记录

2.2 类图设计

has

belongs to

belongs to

references

PetHealthMonitorApp

+Widget build()

«enumeration»

PetType

+String label

+String emoji

+String description

+dog()

+cat()

+rabbit()

+hamster()

+bird()

+other()

«enumeration»

HealthStatus

+String label

+String emoji

+int minScore

+int maxScore

+excellent()

+good()

+normal()

+poor()

+critical()

«enumeration»

AlertType

+String label

+String emoji

+String severity

+appetite()

+activity()

+sleep()

+weight()

+water()

+behavior()

Pet

+String id

+String name

+PetType type

+String breed

+int age

+double weight

+String avatar

+DateTime birthday

+DateTime createdAt

HealthRecord

+String id

+String petId

+DateTime date

+double activityMinutes

+double foodGrams

+double sleepHours

+double waterMl

+double weight

+int heartRate

+int healthScore

BehaviorRecord

+String id

+String petId

+DateTime timestamp

+String behaviorType

+String description

+int duration

Consultation

+String id

+String petId

+String vetId

+String vetName

+String question

+String answer

+DateTime createdAt

+ConsultationStatus status

2.3 页面导航流程

概览

监测

咨询

档案

应用启动

概览页

底部导航

查看健康评分

记录行为

选择兽医

查看档案

查看指标趋势

查看异常提醒

选择记录类型

填写记录

保存记录

发起咨询

等待回复

查看建议

管理宠物信息

查看疫苗记录

查看体检记录

2.4 健康监测流程

提醒系统 异常检测 健康分析 监测页 用户 提醒系统 异常检测 健康分析 监测页 用户 alt [发现异常] [正常] 记录行为数据 提交数据 计算健康评分 返回评分 检查异常 对比正常范围 返回检测结果 触发提醒 发送通知 显示正常状态

三、核心模块设计

3.1 数据模型设计

3.1.1 宠物类型枚举 (PetType)
enum PetType {
  dog(label: '狗狗', emoji: '🐕', description: '活泼好动,需要充足运动'),
  cat(label: '猫咪', emoji: '🐱', description: '优雅独立,睡眠时间长'),
  rabbit(label: '兔子', emoji: '🐰', description: '温顺可爱,饮食需注意'),
  hamster(label: '仓鼠', emoji: '🐹', description: '夜行性,活动量大'),
  bird(label: '鸟类', emoji: '🐦', description: '敏感活泼,需要互动'),
  other(label: '其他', emoji: '🐾', description: '其他类型宠物');

  final String label;
  final String emoji;
  final String description;
}
3.1.2 健康状态枚举 (HealthStatus)
enum HealthStatus {
  excellent(label: '优秀', emoji: '🌟', minScore: 90, maxScore: 100),
  good(label: '良好', emoji: '😊', minScore: 70, maxScore: 89),
  normal(label: '一般', emoji: '😐', minScore: 50, maxScore: 69),
  poor(label: '较差', emoji: '😟', minScore: 30, maxScore: 49),
  critical(label: '危险', emoji: '🚨', minScore: 0, maxScore: 29);

  final String label;
  final String emoji;
  final int minScore;
  final int maxScore;
}
3.1.3 宠物模型 (Pet)
class Pet {
  final String id;              // 宠物ID
  final String name;            // 宠物名称
  final PetType type;           // 宠物类型
  final String breed;           // 品种
  final int age;                // 年龄
  final double weight;          // 体重
  final String avatar;          // 头像路径
  final DateTime birthday;      // 生日
  final DateTime createdAt;     // 创建时间
}
3.1.4 健康记录模型 (HealthRecord)
class HealthRecord {
  final String id;              // 记录ID
  final String petId;           // 宠物ID
  final DateTime date;          // 记录日期
  final double activityMinutes; // 活动时长(分钟)
  final double foodGrams;       // 食量(克)
  final double sleepHours;      // 睡眠时长(小时)
  final double waterMl;         // 饮水量(毫升)
  final double weight;          // 体重(公斤)
  final int heartRate;          // 心率(次/分钟)
  final int healthScore;        // 健康评分
}
3.1.5 健康评分分布
40% 35% 15% 8% 2% 健康评分分布示例 优秀 良好 一般 较差 危险

3.2 页面结构设计

3.2.1 主页面布局

PetHealthMonitorHomePage

IndexedStack

概览页

监测页

咨询页

档案页

NavigationBar

概览 Tab

监测 Tab

咨询 Tab

档案 Tab

3.2.2 概览页结构

概览页

SliverAppBar

宠物信息卡

健康评分卡

指标趋势卡

异常提醒卡

快速操作

评分圆环

状态标签

改善建议

活动趋势

食量趋势

睡眠趋势

异常列表

严重程度标识

3.2.3 健康评分卡结构

健康评分卡

宠物头像

健康评分

状态描述

指标摘要

操作按钮

评分圆环

分数显示

状态图标

活动量

食量

睡眠

体重

3.2.4 监测页结构

监测页

SliverAppBar

今日统计

记录类型选择

记录表单

历史记录

活动时长

食量统计

睡眠时长

行为记录

食量记录

睡眠记录

体重记录

3.3 健康评分逻辑

获取健康记录

计算各项指标得分

活动量得分

食量得分

睡眠得分

体重得分

是否在正常范围

满分

按偏差扣分

加权平均

计算总分

确定健康状态

返回评分结果

3.4 异常检测逻辑

变化>30%

变化≤30%

食量下降

活动减少

睡眠异常

体重波动

获取最新记录

对比历史数据

检测变化幅度

标记为异常

标记为正常

确定异常类型

食欲不振

活动减少

睡眠异常

体重变化

评估严重程度

生成异常提醒

推送通知


四、UI设计规范

4.1 配色方案

应用以清新的绿色为主色调,象征健康与活力:

颜色类型 色值 用途
主色 #4CAF50 (Green) 导航、主题元素
辅助色 #66BB6A 监测页面
第三色 #81C784 咨询页面
强调色 #A5D6A7 档案页面
背景色 #FAFAFA 页面背景
卡片背景 #FFFFFF 信息卡片
警告色 #FF9800 异常提醒
危险色 #F44336 紧急提醒

4.2 健康状态配色

状态 色值 视觉效果
优秀 #4CAF50 健康绿色
良好 #8BC34A 浅绿色
一般 #FFC107 警告黄色
较差 #FF9800 橙色警告
危险 #F44336 红色危险

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
健康评分 48px Bold 状态色
指标数值 20px Bold #000000
指标标签 12px Regular #666666
异常描述 14px Regular #333333

4.4 组件规范

4.4.1 健康评分卡
┌─────────────────────────────────────┐
│  健康评分                            │
│                                     │
│  ┌─────────────────────────────┐   │
│  │      🐕 小白                │   │
│  │                             │   │
│  │         ⭕ 85               │   │
│  │         😊 良好             │   │
│  │                             │   │
│  │  🏃 45分钟  🍖 200克        │   │
│  │  😴 14小时  ⚖️ 5.2公斤      │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘
4.4.2 指标趋势卡
┌─────────────────────────────────────┐
│  指标趋势                            │
│                                     │
│  活动量                              │
│  ━━━━━━━━━━━━━━━━━━━━━━             │
│  📈 近7天平均: 42分钟                │
│                                     │
│  食量                                │
│  ━━━━━━━━━━━━━━━━━━━━━━             │
│  📊 近7天平均: 195克                 │
└─────────────────────────────────────┘
4.4.3 异常提醒卡
┌─────────────────────────────────────┐
│  异常提醒                            │
│                                     │
│  ⚠️ 食欲不振                         │
│  今日食量较昨日减少35%               │
│  建议观察或咨询兽医                  │
│                                     │
│  ⚠️ 活动减少                         │
│  今日活动量较昨日减少42%             │
│  可能需要增加互动                    │
└─────────────────────────────────────┘
4.4.4 记录表单
┌─────────────────────────────────────┐
│  记录行为                            │
│                                     │
│  记录类型: [行为记录 ▼]              │
│                                     │
│  行为类型: [玩耍 ▼]                  │
│                                     │
│  持续时长: ──────●──────── 30分钟    │
│                                     │
│  备注说明:                           │
│  ┌─────────────────────────────┐   │
│  │                             │   │
│  └─────────────────────────────┘   │
│                                     │
│  [保存记录]                         │
└─────────────────────────────────────┘
4.4.5 在线咨询卡
┌─────────────────────────────────────┐
│  在线咨询                            │
│                                     │
│  ┌─────────────────────────────┐   │
│  │ 👨‍⚕️ 张医生                  │   │
│  │ 擅长: 犬类疾病              │   │
│  │ 评分: ⭐⭐⭐⭐⭐              │   │
│  │ [立即咨询]                  │   │
│  └─────────────────────────────┘   │
│                                     │
│  ┌─────────────────────────────┐   │
│  │ 👩‍⚕️ 李医生                  │   │
│  │ 擅长: 猫科疾病              │   │
│  │ 评分: ⭐⭐⭐⭐               │   │
│  │ [立即咨询]                  │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘

五、核心功能实现

5.1 健康评分计算实现

class HealthAnalyzer {
  int calculateHealthScore(HealthRecord record, Pet pet) {
    double score = 100.0;

    score -= _calculateActivityScore(record.activityMinutes, pet.type);
    score -= _calculateFoodScore(record.foodGrams, pet.weight);
    score -= _calculateSleepScore(record.sleepHours, pet.type);
    score -= _calculateWeightScore(record.weight, pet);

    return score.clamp(0, 100).toInt();
  }

  double _calculateActivityScore(double minutes, PetType type) {
    double normalMin = _getNormalActivityMin(type);
    double normalMax = _getNormalActivityMax(type);
    
    if (minutes >= normalMin && minutes <= normalMax) {
      return 0;
    }
    
    double deviation = minutes < normalMin 
        ? (normalMin - minutes) / normalMin 
        : (minutes - normalMax) / normalMax;
    
    return deviation * 20;
  }

  HealthStatus getHealthStatus(int score) {
    if (score >= 90) return HealthStatus.excellent;
    if (score >= 70) return HealthStatus.good;
    if (score >= 50) return HealthStatus.normal;
    if (score >= 30) return HealthStatus.poor;
    return HealthStatus.critical;
  }
}

5.2 异常检测实现

class AlertDetector {
  List<HealthAlert> detectAlerts(HealthRecord current, HealthRecord previous) {
    List<HealthAlert> alerts = [];

    if (_isAppetiteAbnormal(current.foodGrams, previous.foodGrams)) {
      alerts.add(HealthAlert(
        type: AlertType.appetite,
        message: '今日食量较昨日减少${_calculateChange(current.foodGrams, previous.foodGrams)}%',
        severity: AlertSeverity.medium,
        timestamp: DateTime.now(),
      ));
    }

    if (_isActivityAbnormal(current.activityMinutes, previous.activityMinutes)) {
      alerts.add(HealthAlert(
        type: AlertType.activity,
        message: '今日活动量较昨日减少${_calculateChange(current.activityMinutes, previous.activityMinutes)}%',
        severity: AlertSeverity.medium,
        timestamp: DateTime.now(),
      ));
    }

    return alerts;
  }

  bool _isAppetiteAbnormal(double current, double previous) {
    if (previous == 0) return false;
    double change = (previous - current) / previous;
    return change > 0.3;
  }

  double _calculateChange(double current, double previous) {
    if (previous == 0) return 0;
    return ((previous - current) / previous * 100).abs();
  }
}

5.3 健康评分圆环绘制实现

class HealthScorePainter extends CustomPainter {
  final int score;
  final Color color;

  
  void paint(Canvas canvas, Size size) {
    final center = Offset(size.width / 2, size.height / 2);
    final radius = size.width / 2 - 10;

    final backgroundPaint = Paint()
      ..color = Colors.grey.withValues(alpha: 0.2)
      ..style = PaintingStyle.stroke
      ..strokeWidth = 15;

    canvas.drawCircle(center, radius, backgroundPaint);

    final scorePaint = Paint()
      ..color = color
      ..style = PaintingStyle.stroke
      ..strokeWidth = 15
      ..strokeCap = StrokeCap.round;

    final sweepAngle = 2 * pi * (score / 100);
    canvas.drawArc(
      Rect.fromCircle(center: center, radius: radius),
      -pi / 2,
      sweepAngle,
      false,
      scorePaint,
    );
  }
}

5.4 趋势图表绘制实现

class TrendChartPainter extends CustomPainter {
  final List<double> data;
  final Color color;

  
  void paint(Canvas canvas, Size size) {
    if (data.isEmpty) return;

    final path = Path();
    final stepX = size.width / (data.length - 1);
    final maxVal = data.reduce(max);
    final minVal = data.reduce(min);
    final range = maxVal - minVal;

    for (int i = 0; i < data.length; i++) {
      final x = i * stepX;
      final y = size.height - ((data[i] - minVal) / range) * size.height;
      
      if (i == 0) {
        path.moveTo(x, y);
      } else {
        path.lineTo(x, y);
      }
    }

    final paint = Paint()
      ..color = color
      ..style = PaintingStyle.stroke
      ..strokeWidth = 2;

    canvas.drawPath(path, paint);
  }
}

5.5 记录保存实现

void _saveRecord() {
  setState(() {
    _isSaving = true;
  });

  final record = HealthRecord(
    id: 'record_${DateTime.now().millisecondsSinceEpoch}',
    petId: _currentPet.id,
    date: DateTime.now(),
    activityMinutes: _activityMinutes,
    foodGrams: _foodGrams,
    sleepHours: _sleepHours,
    waterMl: _waterMl,
    weight: _weight,
    heartRate: _heartRate,
  );

  _healthAnalyzer.analyze(record).then((score) {
    setState(() {
      _healthRecords.insert(0, record);
      _isSaving = false;
    });

    _checkForAlerts(record);
  });
}

六、交互设计

6.1 健康监测流程

提醒系统 分析引擎 监测页 用户 提醒系统 分析引擎 监测页 用户 打开监测页 获取今日数据 返回统计数据 记录行为 提交记录 更新健康评分 返回新评分 检查异常 推送提醒(如有)

6.2 在线咨询流程

兽医在线

兽医离线

打开咨询页

选择兽医

发起咨询

填写问题描述

上传照片/视频

提交咨询

等待回复

即时回复

留言等待

查看建议

需要进一步咨询?

继续对话

结束咨询

评价服务

6.3 健康档案管理流程

查看信息

查看疫苗

查看体检

查看报告

点击编辑

保存更改

点击添加

保存记录

点击添加

保存记录

档案首页

宠物信息

疫苗记录

体检记录

健康报告

编辑信息

保存信息

添加疫苗

保存疫苗

添加体检

保存体检


七、扩展功能规划

7.1 后续版本规划

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 2024-03-31 2024-04-07 基础UI框架 健康评分系统 行为监测功能 异常检测算法 在线咨询功能 健康报告生成 AI健康诊断 智能穿戴设备 社区交流 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 宠物健康监测应用开发计划

7.2 功能扩展建议

7.2.1 AI智能诊断

诊断功能:

  • 症状智能识别
  • 疾病概率预测
  • 用药提醒
  • 康复跟踪
7.2.2 智能穿戴设备

设备集成:

  • 实时心率监测
  • 体温监测
  • GPS定位追踪
  • 活动量自动记录
7.2.3 社区交流

社区功能:

  • 宠物主人交流
  • 经验分享
  • 领养信息发布
  • 宠物活动组织

八、注意事项

8.1 开发注意事项

  1. 数据准确性:健康数据需确保准确记录

  2. 隐私保护:宠物信息和咨询记录需加密存储

  3. 异常检测:异常阈值需根据宠物类型调整

  4. 性能优化:大量数据查询需优化性能

  5. 用户体验:记录操作需简单便捷

8.2 常见问题

问题 原因 解决方案
评分不准确 阈值设置不当 根据宠物类型调整
异常误报 阈值过于敏感 优化检测算法
数据丢失 未及时保存 增加自动保存
咨询无响应 网络问题 添加离线留言
图表显示异常 数据格式错误 统一数据格式

8.3 使用技巧

🐾 宠物健康管理技巧 🐾

日常监测要点

  • 定时记录:每天固定时间记录数据
  • 持续跟踪:连续记录才能发现趋势
  • 及时反馈:发现异常立即咨询兽医
  • 定期体检:结合专业检查更准确

健康改善建议

  • 合理饮食:根据体重和活动量调整
  • 适量运动:保证每日活动时间
  • 充足睡眠:营造安静舒适环境
  • 定期检查:按时接种疫苗和体检

异常识别技巧

  • 食欲变化:连续2天异常需关注
  • 行为改变:突然改变需重视
  • 体重波动:快速变化需检查
  • 精神状态:萎靡不振需就医

九、运行说明

9.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+
Web浏览器 Chrome 90+

9.2 运行命令

# 查看可用设备
flutter devices

# 运行到Web服务器
flutter run -d web-server -t lib/main_pet_health_monitor.dart --web-port 8140

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_pet_health_monitor.dart

# 代码分析
flutter analyze lib/main_pet_health_monitor.dart

十、总结

宠物健康监测应用通过健康概览、行为监测、在线咨询、健康档案四大模块,为宠物主人提供了一个全方位的健康管理平台。应用支持6种宠物类型、6项健康指标、5级健康状态、6种异常类型,让宠物健康管理更加科学便捷。

核心功能涵盖健康评分计算、异常检测提醒、行为数据记录、在线兽医咨询四大模块。健康评分通过活动量、食量、睡眠、体重等多维度综合计算;异常检测基于历史数据对比,及时发现健康问题;行为记录支持多种类型,方便用户灵活记录;在线咨询连接专业兽医,提供及时的专业建议。

应用采用 Material Design 3 设计规范,以清新的绿色为主色调,象征健康与活力。通过本应用,希望能够帮助宠物主人更好地了解宠物健康状况,及时发现健康问题,为宠物提供更好的生活质量。

宠物健康监测——守护毛孩子的每一天


Logo

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

更多推荐