Flutter 框架跨平台鸿蒙开发 - 宠物健康监测
运行效果图宠物健康监测是一款专业的宠物健康管理工具应用,通过智能监测宠物的日常行为、食量变化、睡眠质量等关键健康指标,及时发现健康异常并提醒主人。应用内置健康数据分析引擎,支持在线咨询专业兽医,为宠物提供全方位的健康守护。应用以清新的绿色为主色调,象征健康与活力。涵盖健康概览、行为监测、在线咨询、健康档案四大模块。用户可以实时查看宠物健康状态、记录日常行为、获取专业建议、管理健康档案,让宠物健康管
宠物健康监测应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图




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 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 健康监测流程
三、核心模块设计
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 健康评分分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 概览页结构
3.2.3 健康评分卡结构
3.2.4 监测页结构
3.3 健康评分逻辑
3.4 异常检测逻辑
四、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 后续版本规划
7.2 功能扩展建议
7.2.1 AI智能诊断
诊断功能:
- 症状智能识别
- 疾病概率预测
- 用药提醒
- 康复跟踪
7.2.2 智能穿戴设备
设备集成:
- 实时心率监测
- 体温监测
- GPS定位追踪
- 活动量自动记录
7.2.3 社区交流
社区功能:
- 宠物主人交流
- 经验分享
- 领养信息发布
- 宠物活动组织
八、注意事项
8.1 开发注意事项
-
数据准确性:健康数据需确保准确记录
-
隐私保护:宠物信息和咨询记录需加密存储
-
异常检测:异常阈值需根据宠物类型调整
-
性能优化:大量数据查询需优化性能
-
用户体验:记录操作需简单便捷
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 设计规范,以清新的绿色为主色调,象征健康与活力。通过本应用,希望能够帮助宠物主人更好地了解宠物健康状况,及时发现健康问题,为宠物提供更好的生活质量。
宠物健康监测——守护毛孩子的每一天
更多推荐

所有评论(0)