Flutter 框架跨平台鸿蒙开发 - 植物识别科普

植物识别科普应用


欢迎加入开源鸿蒙跨平台社区:

https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

1.1 应用简介

植物识别科普是一款科技探索类应用,为用户提供拍照识别植物、植物百科、养护指南等一站式服务。支持6大植物分类、6种植物示例、详细的养护信息,让用户轻松认识身边的每一株植物。

应用以生机勃勃的绿色为主色调,象征大自然的生命力与希望。涵盖首页概览、拍照识别、植物百科、我的收藏四大模块。用户可以通过拍照或上传图片识别植物,查看详细的植物信息和养护指南,收藏感兴趣的植物。

1.2 核心功能

功能模块 功能描述 实现方式
拍照识别 拍照或上传图片识别植物 模拟识别动画
植物百科 详细的植物信息展示 分类筛选 + 详情页
养护指南 光照、水分、温度要求 图标 + 文字说明
收藏功能 收藏感兴趣的植物 列表管理
识别历史 查看识别记录 时间线展示
季节推荐 当季植物推荐 季节筛选

1.3 植物分类定义

序号 分类名称 Emoji 颜色 典型植物
1 花卉 🌸 #E91E63 玫瑰、樱花
2 树木 🌳 #4CAF50 樱花树、银杏
3 草本 🌿 #8BC34A 绿萝、薄荷
4 多肉 🌵 #00BCD4 仙人掌、芦荟
5 蕨类 🌿 #009688 铁线蕨、肾蕨
6 水生 🪷 #2196F3 荷花、睡莲

1.4 季节定义

序号 季节名称 Emoji 颜色 代表植物
1 春季 🌸 #FFCDD2 樱花、玫瑰
2 夏季 ☀️ #FFF59D 荷花、绿萝
3 秋季 🍂 #FFCC80 菊花、桂花
4 冬季 ❄️ #B3E5FC 梅花、水仙

1.5 养护难度定义

序号 难度名称 星级 颜色 描述
1 容易 #8BC34A 新手友好,易于养护
2 中等 ⭐⭐ #FFC107 需要一定经验
3 困难 ⭐⭐⭐ #FF5722 需要专业知识和细心照料

1.6 技术栈

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

1.7 项目结构

复制代码
lib/
└── main_plant_recognition.dart
    ├── PlantRecognitionApp           # 应用入口
    ├── PlantCategory                 # 植物分类枚举
    ├── Season                        # 季节枚举
    ├── Difficulty                    # 养护难度枚举
    ├── Plant                         # 植物模型
    ├── ScanRecord                    # 识别记录模型
    ├── PlantRecognitionHomePage      # 主页面(底部导航)
    ├── _buildHomePage                # 首页
    ├── _buildScanPage                # 识别页
    ├── _buildEncyclopediaPage        # 百科页
    ├── _buildCollectionPage          # 收藏页
    └── _PlantDetailSheet             # 植物详情弹窗

二、系统架构

2.1 整体架构图

Data Layer
Business Layer
Presentation Layer
主页面

PlantRecognitionHomePage
首页
识别页
百科页
收藏页
快速扫描
学习统计
最近识别
季节植物
拍照区域
操作按钮
识别历史
分类筛选
植物列表
收藏网格
识别处理器

ScanProcessor
收藏管理器

FavoriteManager
详情展示器

DetailPresenter
Plant

植物模型
ScanRecord

识别记录
PlantCategory

植物分类

2.2 类图设计

has
has
has
references
PlantRecognitionApp
+Widget build()
<<enumeration>>
PlantCategory
+String label
+String emoji
+Color color
+flower()
+tree()
+herb()
+succulent()
+fern()
+aquatic()
<<enumeration>>
Season
+String label
+String emoji
+Color color
+spring()
+summer()
+autumn()
+winter()
<<enumeration>>
Difficulty
+String label
+String stars
+Color color
+easy()
+medium()
+hard()
Plant
+String id
+String name
+String scientificName
+PlantCategory category
+String emoji
+String description
+List features
+Difficulty difficulty
+String lightNeed
+String waterNeed
+String temperature
+List careTips
+List benefits
+Season bestSeason
+bool isFavorite
ScanRecord
+String id
+Plant plant
+DateTime scanTime
+String location

2.3 页面导航流程

首页
识别
百科
收藏
应用启动
首页
底部导航
查看统计
拍照识别
植物列表
收藏植物
点击植物
识别结果
筛选分类
查看收藏
植物详情
收藏/取消收藏

2.4 植物识别流程

详情弹窗 识别处理器 识别页 用户 详情弹窗 识别处理器 识别页 用户 点击拍照/相册 启动识别动画 播放扫描动画 模拟识别完成 随机选择植物 返回识别结果 显示植物详情 展示完整信息


三、核心模块设计

3.1 数据模型设计

3.1.1 植物分类枚举 (PlantCategory)
dart 复制代码
enum PlantCategory {
  flower('花卉', '🌸', Color(0xFFE91E63)),
  tree('树木', '🌳', Color(0xFF4CAF50)),
  herb('草本', '🌿', Color(0xFF8BC34A)),
  succulent('多肉', '🌵', Color(0xFF00BCD4)),
  fern('蕨类', '🌿', Color(0xFF009688)),
  aquatic('水生', '🪷', Color(0xFF2196F3));

  final String label;
  final String emoji;
  final Color color;
}
3.1.2 季节枚举 (Season)
dart 复制代码
enum Season {
  spring('春季', '🌸', Color(0xFFFFCDD2)),
  summer('夏季', '☀️', Color(0xFFFFF59D)),
  autumn('秋季', '🍂', Color(0xFFFFCC80)),
  winter('冬季', '❄️', Color(0xFFB3E5FC));

  final String label;
  final String emoji;
  final Color color;
}
3.1.3 植物模型 (Plant)
dart 复制代码
class Plant {
  final String id;                  // 植物ID
  final String name;                // 植物名称
  final String scientificName;      // 学名
  final PlantCategory category;     // 分类
  final String emoji;               // 表情符号
  final String description;         // 描述
  final List<String> features;      // 主要特征
  final Difficulty difficulty;      // 养护难度
  final String lightNeed;           // 光照需求
  final String waterNeed;           // 水分需求
  final String temperature;         // 适宜温度
  final List<String> careTips;      // 养护技巧
  final List<String> benefits;      // 主要价值
  final Season bestSeason;          // 最佳季节
  final bool isFavorite;            // 是否收藏
}
3.1.4 识别记录模型 (ScanRecord)
dart 复制代码
class ScanRecord {
  final String id;                  // 记录ID
  final Plant plant;                // 识别的植物
  final DateTime scanTime;          // 识别时间
  final String? location;           // 识别地点
}
3.1.5 植物分类分布

25% 20% 18% 15% 12% 10% 植物分类分布示例 花卉 草本 多肉 树木 水生 蕨类

3.2 页面结构设计

3.2.1 主页面布局

PlantRecognitionHomePage
IndexedStack
首页
识别页
百科页
收藏页
NavigationBar
首页 Tab
识别 Tab
百科 Tab
收藏 Tab

3.2.2 首页结构

首页
顶部标题
快速扫描卡片
学习统计
最近识别
季节植物
识别次数
收藏植物
本月新增
连续学习
横向滚动列表
网格布局

3.2.3 识别页结构

识别页
拍照区域
操作按钮
识别历史
扫描框
闪光灯开关
拍照按钮
相册按钮
历史记录列表

3.2.4 百科页结构

百科页
分类筛选
植物列表
全部
花卉
树木
草本
多肉
蕨类
水生
植物卡片
植物图标
名称学名
养护信息
收藏按钮

3.3 植物识别逻辑

用户点击拍照/相册
启动扫描动画
动画播放2秒
随机选择植物
创建识别记录
添加到历史列表
重置动画状态
弹出植物详情
显示完整信息

3.4 收藏管理逻辑



用户点击收藏按钮
是否已收藏?
从收藏列表移除
更新按钮状态
添加到收藏列表
刷新界面


四、UI设计规范

4.1 配色方案

应用以生机勃勃的绿色为主色调,象征大自然的生命力与希望:

颜色类型 色值 用途
主色 #4CAF50 (Green) 导航、主题元素
辅助色 #8BC34A 次要按钮
第三色 #C8E6C9 背景渐变
强调色 #A5D6A7 卡片背景
背景色 #E8F5E9 页面背景
卡片背景 #FFFFFF 内容卡片

4.2 分类专属颜色

分类 色值 视觉效果
花卉 #E91E63 粉红浪漫
树木 #4CAF50 绿色生机
草本 #8BC34A 嫩绿清新
多肉 #00BCD4 青色可爱
蕨类 #009688 深绿典雅
水生 #2196F3 蓝色清澈

4.3 字体规范

元素 字号 字重 颜色
页面标题 24px Bold 主色
植物名称 16px Bold #000000
学名 14px Italic 灰色
养护信息 11px Regular 灰色
统计数字 18px Bold 主色

4.4 组件规范

4.4.1 快速扫描卡片
复制代码
┌─────────────────────────────────────┐
│  拍照识别植物              📷       │
│  拍照或上传图片,快速识别植物        │
└─────────────────────────────────────┘
4.4.2 学习统计卡片
复制代码
┌─────────────────────────────────────┐
│  学习统计                            │
│                                     │
│  📷 5次    ❤️ 3种    📈 3种    🔥 7天│
│  识别次数  收藏植物  本月新增  连续学习│
└─────────────────────────────────────┘
4.4.3 植物卡片
复制代码
┌─────────────────────────────────────┐
│  ┌──────┐                           │
│  │  🌹  │  玫瑰          ❤️         │
│  │      │  Rosa chinensis           │
│  └──────┘  [花卉]                   │
│            ☀️ 充足阳光  💧 适量浇水  │
└─────────────────────────────────────┘
4.4.4 分类筛选芯片
复制代码
┌─────────────────────────────────────┐
│  [🌱 全部] [🌸 花卉] [🌳 树木]      │
│  [🌿 草本] [🌵 多肉] [🌿 蕨类]      │
│  [🪷 水生]                          │
└─────────────────────────────────────┘
4.4.5 养护信息卡片
复制代码
┌─────────────────────────────────────┐
│  养护要求                            │
│                                     │
│  ┌─────┐  ┌─────┐  ┌─────┐         │
│  │ ☀️  │  │ 💧  │  │ 🌡️  │         │
│  │ 光照 │  │ 水分 │  │ 温度 │         │
│  │充足  │  │适量  │  │15-25°│         │
│  └─────┘  └─────┘  └─────┘         │
└─────────────────────────────────────┘

五、核心功能实现

5.1 模拟识别实现

dart 复制代码
void _simulateScan() {
  _scanController.forward().then((_) {
    final random = Random();
    final plant = _plants[random.nextInt(_plants.length)];

    setState(() {
      _scanRecords.insert(0, ScanRecord(
        id: DateTime.now().millisecondsSinceEpoch.toString(),
        plant: plant,
        scanTime: DateTime.now(),
      ));
    });

    _scanController.reset();
    _showPlantDetail(plant);
  });
}

5.2 收藏功能实现

dart 复制代码
void _toggleFavorite(Plant plant) {
  setState(() {
    if (_favorites.contains(plant)) {
      _favorites.remove(plant);
    } else {
      _favorites.add(plant);
    }
  });
}

5.3 分类筛选实现

dart 复制代码
Widget _buildCategoryFilter() {
  return Container(
    height: 50,
    child: ListView(
      scrollDirection: Axis.horizontal,
      children: [
        _buildCategoryChip(null, '全部', '🌱'),
        ...PlantCategory.values.map((category) {
          return _buildCategoryChip(category, category.label, category.emoji);
        }),
      ],
    ),
  );
}

5.4 植物详情展示

dart 复制代码
void _showPlantDetail(Plant plant) {
  showModalBottomSheet(
    context: context,
    isScrollControlled: true,
    builder: (context) => _PlantDetailSheet(
      plant: plant,
      isFavorite: _favorites.contains(plant),
      onFavoriteToggle: () => _toggleFavorite(plant),
    ),
  );
}

5.5 时间格式化

dart 复制代码
String _formatTime(DateTime time) {
  final now = DateTime.now();
  final diff = now.difference(time);
  if (diff.inMinutes < 60) return '${diff.inMinutes}分钟前';
  if (diff.inHours < 24) return '${diff.inHours}小时前';
  if (diff.inDays < 7) return '${diff.inDays}天前';
  return '${time.month}月${time.day}日';
}

六、交互设计

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 基础UI框架 植物数据模型 识别模拟功能 真实AI识别 图片上传功能 更多植物数据 社区分享 养护提醒 云端同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 植物识别科普应用开发计划

7.2 功能扩展建议

7.2.1 真实AI识别

识别功能:

  • 集成图像识别API
  • 支持多种植物识别
  • 识别准确率优化
  • 离线识别支持
7.2.2 社区功能

社区功能:

  • 植物分享动态
  • 养护经验交流
  • 问答社区
  • 植物达人认证
7.2.3 养护提醒

提醒功能:

  • 浇水提醒
  • 施肥提醒
  • 换盆提醒
  • 病虫害预警

八、注意事项

8.1 开发注意事项

  1. 性能优化:植物列表较多时需使用ListView.builder

  2. 图片处理:真实识别需处理图片压缩和格式转换

  3. 数据存储:收藏和识别记录需持久化存储

  4. 动画控制:扫描动画需正确释放资源

  5. 状态管理:收藏状态需及时同步更新

8.2 常见问题

问题 原因 解决方案
列表卡顿 数据量大 使用builder
收藏不同步 状态未更新 setState刷新
动画不播放 控制器未初始化 检查initState
详情不显示 数据传递错误 检查参数传递
分类筛选无效 状态未保存 使用setState

8.3 使用技巧

🌱 植物识别科普使用技巧 🌱

识别技巧

  • 拍照时保持光线充足
  • 尽量拍摄植物的叶子或花朵
  • 避免逆光拍摄
  • 植物主体占画面大部分

养护建议

  • 根据光照需求选择摆放位置
  • 浇水遵循"见干见湿"原则
  • 定期转动花盆保证均匀生长
  • 注意季节变化调整养护方式

学习建议

  • 每天识别一种新植物
  • 收藏感兴趣的植物
  • 阅读养护技巧
  • 分享给朋友一起学习

九、运行说明

9.1 环境要求

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

9.2 运行命令

bash 复制代码
# 查看可用设备
flutter devices

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

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

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

十、总结

植物识别科普应用通过首页概览、拍照识别、植物百科、我的收藏四大模块,为用户提供了一个便捷的植物学习和识别平台。应用支持6大植物分类、详细的养护信息、收藏功能,让用户轻松认识身边的每一株植物。

核心功能涵盖拍照识别、植物百科、养护指南、收藏管理四大模块。拍照识别支持模拟识别动画,展示识别结果;植物百科提供分类筛选和详细信息展示;养护指南包含光照、水分、温度等关键信息;收藏管理方便用户保存感兴趣的植物。

应用采用 Material Design 3 设计规范,以生机勃勃的绿色为主色调,象征大自然的生命力与希望。通过本应用,希望能够帮助用户认识更多植物,学习养护知识,培养对大自然的热爱。

植物识别科普------认识身边的每一株植物


相关推荐
世人万千丶3 小时前
Flutter 框架跨平台鸿蒙开发 - 气味图书馆应用
学习·flutter·华为·开源·harmonyos·鸿蒙
一直在想名3 小时前
Flutter 框架跨平台鸿蒙开发 - 读书交流俱乐部
flutter·华为·harmonyos
前端不太难3 小时前
鸿蒙 App、PC、游戏,本质是同一套系统吗?
游戏·状态模式·harmonyos
Cxiaomu3 小时前
Flutter 录制视频+大文件上传 MinIO + NodeJS落库
flutter·音视频·文件上传
独特的螺狮粉3 小时前
雾色配色器:鸿蒙Flutter框架 实现的配色方案生成工具
flutter·华为·架构·开源·harmonyos
特立独行的猫a4 小时前
HarmonyOS鸿蒙PC的QT应用开发:(二、开发环境搭建及第一个HelloWorld)
qt·华为·harmonyos·鸿蒙·鸿蒙pc
浮芷.4 小时前
Flutter 框架跨平台鸿蒙开发 - 旧物改造灵感库应用
科技·flutter·华为·harmonyos·鸿蒙
luoganttcc4 小时前
华为 的 npu 架构如何 进行 flash attention
数据库·华为
无忧智库4 小时前
深度解码:华为IPD流程管理体系L1-L5最佳实践与数字化转型架构全景(PPT)
华为·架构