Flutter 框架跨平台鸿蒙开发 - 植物识别科普
运行效果图植物识别科普是一款科技探索类应用,为用户提供拍照识别植物、植物百科、养护指南等一站式服务。支持6大植物分类、6种植物示例、详细的养护信息,让用户轻松认识身边的每一株植物。应用以生机勃勃的绿色为主色调,象征大自然的生命力与希望。序号分类名称Emoji颜色典型植物1花卉🌸#E91E63玫瑰、樱花2树木🌳#4CAF50樱花树、银杏3草本🌿#8BC34A绿萝、薄荷4多肉🌵#00BCD4仙
植物识别科普应用
欢迎加入开源鸿蒙跨平台社区:
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 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 植物识别流程
三、核心模块设计
3.1 数据模型设计
3.1.1 植物分类枚举 (PlantCategory)
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)
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)
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)
class ScanRecord {
final String id; // 记录ID
final Plant plant; // 识别的植物
final DateTime scanTime; // 识别时间
final String? location; // 识别地点
}
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) | 导航、主题元素 |
| 辅助色 | #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 模拟识别实现
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 收藏功能实现
void _toggleFavorite(Plant plant) {
setState(() {
if (_favorites.contains(plant)) {
_favorites.remove(plant);
} else {
_favorites.add(plant);
}
});
}
5.3 分类筛选实现
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 植物详情展示
void _showPlantDetail(Plant plant) {
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (context) => _PlantDetailSheet(
plant: plant,
isFavorite: _favorites.contains(plant),
onFavoriteToggle: () => _toggleFavorite(plant),
),
);
}
5.5 时间格式化
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 后续版本规划
7.2 功能扩展建议
7.2.1 真实AI识别
识别功能:
- 集成图像识别API
- 支持多种植物识别
- 识别准确率优化
- 离线识别支持
7.2.2 社区功能
社区功能:
- 植物分享动态
- 养护经验交流
- 问答社区
- 植物达人认证
7.2.3 养护提醒
提醒功能:
- 浇水提醒
- 施肥提醒
- 换盆提醒
- 病虫害预警
八、注意事项
8.1 开发注意事项
-
性能优化:植物列表较多时需使用ListView.builder
-
图片处理:真实识别需处理图片压缩和格式转换
-
数据存储:收藏和识别记录需持久化存储
-
动画控制:扫描动画需正确释放资源
-
状态管理:收藏状态需及时同步更新
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 运行命令
# 查看可用设备
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 设计规范,以生机勃勃的绿色为主色调,象征大自然的生命力与希望。通过本应用,希望能够帮助用户认识更多植物,学习养护知识,培养对大自然的热爱。
植物识别科普——认识身边的每一株植物
更多推荐
所有评论(0)