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

一、项目概述

运行效果图

image-20260409223814139

image-20260409223819102

image-20260409223822766

image-20260409223832978

1.1 应用简介

虚拟植物养成日记是一款创意娱乐应用,在手机里养一棵虚拟植物,根据你每天的心情、步数、天气来决定植物的生长状态,植物也会"感受"你的生活。应用通过有趣的养成机制,让用户在日常生活中关注自己的健康和情绪,与虚拟植物共同成长。

应用以清新的绿色为主色调,象征生命与希望。涵盖植物养成、成长日记、数据统计、关于信息四大模块。用户可以种植植物、记录日记、查看统计、与植物互动,体验虚拟养成带来的乐趣。

1.2 核心功能

功能模块 功能描述 实现方式
植物养成 种植和培养虚拟植物 模型展示
心情影响 心情决定植物生长 效果系数
步数联动 运动步数促进生长 数据统计
天气影响 天气影响植物状态 效果系数
成长日记 记录每日心情步数 列表存储
数据统计 展示成长数据 图表展示

1.3 植物类型定义

序号 类型名称 Emoji 描述
1 花朵 🌸 娇艳欲滴的花朵
2 小树 🌳 茁壮成长的小树
3 多肉 🌵 可爱呆萌的多肉
4 香草 🌿 清新怡人的香草
5 盆栽 🪴 精致典雅的盆栽
6 果树 🍎 硕果累累的果树

1.4 成长阶段定义

序号 阶段名称 Emoji 进度 天数
1 种子 🌱 0% 0天
2 发芽 🌿 20% 3天
3 幼苗 ☘️ 40% 7天
4 成长 🪴 60% 14天
5 成熟 🌳 80% 21天
6 茂盛 🌸 100% 30天

1.5 心情类型定义

序号 心情名称 Emoji 颜色 效果系数
1 开心 😊 #FFEB3B 1.2
2 平静 😌 #81C784 1.0
3 难过 😢 #90CAF9 0.8
4 兴奋 🤩 #FF7043 1.3
5 疲惫 😴 #B39DDB 0.7
6 焦虑 😰 #EF9A9A 0.6

1.6 天气类型定义

序号 天气名称 Emoji 效果系数
1 晴天 ☀️ 1.2
2 多云 1.0
3 雨天 🌧️ 0.8
4 雪天 ❄️ 0.6

1.7 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
动画效果 AnimationController -
状态管理 StatefulWidget -
目标平台 鸿蒙OS / Web API 21+

1.8 项目结构

lib/
└── main_virtual_plant_diary.dart
    ├── VirtualPlantDiaryApp              # 应用入口
    ├── PlantType                        # 植物类型枚举
    ├── GrowthStage                     # 成长阶段枚举
    ├── MoodType                        # 心情类型枚举
    ├── WeatherType                     # 天气类型枚举
    ├── PlantHealth                     # 植物健康枚举
    ├── Plant                           # 植物模型
    ├── DiaryEntry                     # 日记模型
    ├── VirtualPlantDiaryHomePage     # 主页面(底部导航)
    ├── _buildPlantPage               # 植物页面
    ├── _buildDiaryPage              # 日记页面
    ├── _buildStatsPage              # 统计页面
    └── _buildProfilePage            # 关于页面

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
VirtualPlantDiaryHomePage

植物页

日记页

统计页

关于页

植物展示

状态显示

浇水互动

日记入口

日记表单

心情选择

天气选择

历史日记

成长进度

心情统计

步数统计

功能说明

养成技巧

成长计算器
GrowthCalculator

日记管理器
DiaryManager

状态控制器
StateController

Plant
植物模型

DiaryEntry
日记模型

MoodType
心情类型

WeatherType
天气类型

GrowthStage
成长阶段

2.2 类图设计

has

has

has

has

has

VirtualPlantDiaryApp

+Widget build()

«enumeration»

PlantType

+String label

+String emoji

+String description

+flower()

+tree()

+succulent()

+herb()

+bonsai()

+fruit()

«enumeration»

GrowthStage

+String label

+String emoji

+double progress

+int days

+seed()

+sprout()

+seedling()

+growing()

+mature()

+flourishing()

«enumeration»

MoodType

+String label

+String emoji

+Color color

+double effect

+happy()

+calm()

+sad()

+excited()

+tired()

+anxious()

«enumeration»

WeatherType

+String label

+String emoji

+double effect

+sunny()

+cloudy()

+rainy()

+snowy()

«enumeration»

PlantHealth

+String label

+String emoji

+Color color

+excellent()

+good()

+normal()

+poor()

+critical()

Plant

+String id

+String name

+PlantType type

+GrowthStage stage

+PlantHealth health

+double growth

+double happiness

+double hydration

+DateTime createdAt

+int totalDays

+int steps

+MoodType? lastMood

+WeatherType? lastWeather

DiaryEntry

+String id

+DateTime date

+MoodType mood

+WeatherType weather

+int steps

+String? note

+double growthChange

2.3 页面导航流程

植物

日记

统计

关于

应用启动

植物页

底部导航

植物展示

日记记录

数据统计

应用信息

查看植物

浇水互动

写日记

选择心情

选择天气

保存日记

更新植物状态

查看成长

查看心情分布

查看步数统计

2.4 成长计算流程

植物 成长计算器 日记页 用户 植物 成长计算器 日记页 用户 记录日记 选择心情 选择天气 计算成长值 心情系数 × 天气系数 × 步数 更新植物状态 显示新状态 保存日记 显示成功提示

三、核心模块设计

3.1 数据模型设计

3.1.1 植物类型枚举 (PlantType)
enum PlantType {
  flower(label: '花朵', emoji: '🌸', description: '娇艳欲滴的花朵'),
  tree(label: '小树', emoji: '🌳', description: '茁壮成长的小树'),
  succulent(label: '多肉', emoji: '🌵', description: '可爱呆萌的多肉'),
  herb(label: '香草', emoji: '🌿', description: '清新怡人的香草'),
  bonsai(label: '盆栽', emoji: '🪴', description: '精致典雅的盆栽'),
  fruit(label: '果树', emoji: '🍎', description: '硕果累累的果树');

  final String label;
  final String emoji;
  final String description;
}
3.1.2 成长阶段枚举 (GrowthStage)
enum GrowthStage {
  seed(label: '种子', emoji: '🌱', progress: 0.0, days: 0),
  sprout(label: '发芽', emoji: '🌿', progress: 0.2, days: 3),
  seedling(label: '幼苗', emoji: '☘️', progress: 0.4, days: 7),
  growing(label: '成长', emoji: '🪴', progress: 0.6, days: 14),
  mature(label: '成熟', emoji: '🌳', progress: 0.8, days: 21),
  flourishing(label: '茂盛', emoji: '🌸', progress: 1.0, days: 30);

  final String label;
  final String emoji;
  final double progress;
  final int days;
}
3.1.3 心情类型枚举 (MoodType)
enum MoodType {
  happy(label: '开心', emoji: '😊', color: Color(0xFFFFEB3B), effect: 1.2),
  calm(label: '平静', emoji: '😌', color: Color(0xFF81C784), effect: 1.0),
  sad(label: '难过', emoji: '😢', color: Color(0xFF90CAF9), effect: 0.8),
  excited(label: '兴奋', emoji: '🤩', color: Color(0xFFFF7043), effect: 1.3),
  tired(label: '疲惫', emoji: '😴', color: Color(0xFFB39DDB), effect: 0.7),
  anxious(label: '焦虑', emoji: '😰', color: Color(0xFFEF9A9A), effect: 0.6);

  final String label;
  final String emoji;
  final Color color;
  final double effect;
}
3.1.4 植物模型 (Plant)
class Plant {
  final String id;                    // 植物ID
  final String name;                 // 植物名称
  final PlantType type;              // 植物类型
  final GrowthStage stage;           // 成长阶段
  final PlantHealth health;          // 健康状态
  final double growth;              // 成长值(0-1)
  final double happiness;            // 心情值(0-1)
  final double hydration;            // 水分值(0-1)
  final DateTime createdAt;         // 创建时间
  final int totalDays;              // 总天数
  final int steps;                  // 总步数
  final MoodType? lastMood;         // 心情
  final WeatherType? lastWeather;   // 天气
}
3.1.5 日记模型 (DiaryEntry)
class DiaryEntry {
  final String id;                    // 日记ID
  final DateTime date;              // 日期
  final MoodType mood;              // 心情
  final WeatherType weather;         // 天气
  final int steps;                  // 步数
  final String? note;                // 备注
  final double growthChange;         // 成长变化
}

3.2 页面结构设计

3.2.1 主页面布局

VirtualPlantDiaryHomePage

IndexedStack

植物页

日记页

统计页

关于页

NavigationBar

植物 Tab

日记 Tab

统计 Tab

关于 Tab

3.2.2 植物页结构

植物页

SliverAppBar

植物展示

状态卡片

快捷操作

今日状态

植物动画

植物名称

类型阶段

成长值

心情值

水分值

健康标签

浇水按钮

写日记按钮

3.2.3 日记页结构

日记页

SliverAppBar

日记表单

历史日记

心情选择

天气选择

备注输入

保存按钮

日记卡片

日期天气

步数记录

成长变化

3.3 成长计算逻辑

记录日记

获取心情系数

获取天气系数

获取步数

计算成长值

心情×天气×步数/10000

计算结果

更新植物状态

更新成长值

更新心情值

更新水分值

计算新阶段

保存日记


四、UI设计规范

4.1 配色方案

应用以清新的绿色为主色调,象征生命与希望:

颜色类型 色值 用途
主色 #4CAF50 (Green) 导航、主题元素
辅助色 #81C784 日记页面
第三色 #66BB6A 统计页面
强调色 #A5D6A7 关于页面
背景色 #FAFAFA 页面背景
卡片背景 #FFFFFF 植物卡片

4.2 心情颜色定义

心情 色值 视觉效果
开心 #FFEB3B 黄色明亮
平静 #81C784 绿色宁静
难过 #90CAF9 蓝色忧郁
兴奋 #FF7043 橙色活力
疲惫 #B39DDB 紫色困倦
焦虑 #EF9A9A 红色焦虑

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
植物名称 24px Bold 白色
统计数字 20px Bold 主色
状态标签 12px Regular 灰色
进度数值 12px Regular 主色

4.4 组件规范

4.4.1 植物展示卡片
┌─────────────────────────────────────┐
│                                     │
│              🌱                     │
│                                     │
│            小绿                     │
│        🌸 花朵 · 幼苗               │
│                                     │
└─────────────────────────────────────┘
4.4.2 状态卡片
┌─────────────────────────────────────┐
│   成长35%   心情70%   水分60%      │
│                                     │
│         [😊 健康良好]              │
└─────────────────────────────────────┘
4.4.3 快捷操作按钮
┌─────────────────────────────────────┐
│  [💧 浇水]        [✏️ 写日记]       │
└─────────────────────────────────────┘
4.4.4 日记表单
┌─────────────────────────────────────┐
│  记录今天                             │
│                                     │
│  今天的心情:                          │
│  [😊 开心] [😌 平静] [😢 难过]      │
│                                     │
│  今天天气:                           │
│  [☀️ 晴天] [⛅ 多云] [🌧️ 雨天]     │
│                                     │
│  写点什么...                        │
│  ┌─────────────────────────────┐   │
│  │                             │   │
│  └─────────────────────────────┘   │
│                                     │
│  [💾 保存日记]                      │
└─────────────────────────────────────┘

五、核心功能实现

5.1 植物创建实现

void _createPlant(String name, PlantType type) {
  setState(() {
    _currentPlant = Plant(
      id: 'plant_${DateTime.now().millisecondsSinceEpoch}',
      name: name,
      type: type,
    );
  });
}

5.2 日记记录实现

void _recordDiary() {
  final growthEffect = _selectedMood.effect * _selectedWeather.effect * (_todaySteps / 10000);
  final growthChange = growthEffect.clamp(0.01, 0.1);

  setState(() {
    _currentPlant = Plant(
      // 更新植物状态
      growth: (_currentPlant!.growth + growthChange).clamp(0.0, 1.0),
      happiness: (_currentPlant!.happiness + _selectedMood.effect * 0.1).clamp(0.0, 1.0),
      hydration: (_currentPlant!.hydration - 0.1).clamp(0.0, 1.0),
      // ... 其他属性
    );
  });
}

5.3 浇水功能实现

void _waterPlant() {
  setState(() {
    _currentPlant = Plant(
      // ... 其他属性
      hydration: (_currentPlant!.hydration + 0.3).clamp(0.0, 1.0),
    );
  });
}

5.4 阶段计算实现

GrowthStage _getNewStage(double growth) {
  if (growth >= 1.0) return GrowthStage.flourishing;
  if (growth >= 0.8) return GrowthStage.mature;
  if (growth >= 0.6) return GrowthStage.growing;
  if (growth >= 0.4) return GrowthStage.seedling;
  if (growth >= 0.2) return GrowthStage.sprout;
  return GrowthStage.seed;
}

5.5 动画效果实现


void initState() {
  _plantAnimationController = AnimationController(
    duration: const Duration(seconds: 2),
    vsync: this,
  )..repeat(reverse: true);
  
  _plantAnimation = Tween<double>(begin: 0.0, end: 0.05).animate(
    CurvedAnimation(parent: _plantAnimationController, curve: Curves.easeInOut),
  );
}

Widget _buildPlantDisplay() {
  return AnimatedBuilder(
    animation: _plantAnimation,
    builder: (context, child) {
      return Transform.rotate(
        angle: _plantAnimation.value,
        child: Text(_currentPlant!.stage.emoji),
      );
    },
  );
}

六、交互设计

6.1 植物养成流程

日记 植物 植物页 用户 日记 植物 植物页 用户 loop [每天] 种下植物 创建植物对象 选择心情 选择天气 记录日记 计算成长 保存记录 显示新状态 浇水 增加水分 显示浇水效果

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 基础UI框架 植物养成功能 日记记录功能 真实数据对接 社交分享功能 成就系统 AR植物种植 多人互动 植物商店 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 虚拟植物养成日记应用开发计划

7.2 功能扩展建议

7.2.1 真实数据对接

数据功能:

  • 运动健康API集成
  • 天气API实时获取
  • 位置信息获取
  • 历史数据同步
7.2.2 社交功能

社交功能:

  • 植物展览分享
  • 社区互动
  • 植物排行榜
  • 互赠礼物
7.2.3 成就系统

成就功能:

  • 连续打卡成就
  • 植物进化成就
  • 步数达人成就
  • 心情记录成就

八、注意事项

8.1 开发注意事项

  1. 动画性能:植物动画需流畅自然

  2. 状态管理:植物状态需正确同步

  3. 数据计算:成长计算需合理设计

  4. 用户引导:新用户引导需清晰

  5. 数据持久化:日记数据需保存

8.2 常见问题

问题 原因 解决方案
动画卡顿 刷新频率高 优化动画
成长计算错误 系数问题 检查计算公式
阶段不更新 边界条件 检查阈值
浇水无效果 状态未更新 检查setState
日记不保存 数据未保存 检查insert

8.3 养成技巧

🌱 虚拟植物养成技巧 🌱

保持好心情

  • 开心心情: 成长+20%
  • 平静心情: 成长+0%
  • 难过心情: 成长-20%

关注天气影响

  • 晴天: 成长+20%
  • 多云: 成长+0%
  • 雨天: 成长-20%
  • 雪天: 成长-40%

运动步数

  • 步数越多,植物成长越快
  • 建议每天保持5000步以上

养成建议

  • 每天记录日记
  • 保持好心情
  • 适当浇水
  • 多运动

九、运行说明

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_virtual_plant_diary.dart --web-port 8146

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

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

十、总结

虚拟植物养成日记应用通过植物养成、成长日记、数据统计、关于信息四大模块,为用户提供了一个独特的虚拟养成体验平台。应用支持6种植物类型、6个成长阶段、6种心情类型、4种天气类型,让用户在日常生活中关注健康和情绪。

核心功能涵盖植物养成、心情影响、步数联动、天气影响、日记记录五大模块。植物类型从花朵到果树,满足不同用户偏好;成长阶段从种子到茂盛,记录植物成长全过程;心情和天气影响植物生长,增加养成趣味性。

应用采用 Material Design 3 设计规范,以清新的绿色为主色调,象征生命与希望。通过本应用,希望能够让用户在虚拟植物的陪伴下,保持好心情,多运动,养成健康的生活习惯。

虚拟植物养成日记——与植物共同成长


Logo

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

更多推荐