1. 项目背景与核心价值
"智分垃圾通"这个项目诞生于一个非常实际的痛点:虽然垃圾分类政策已经推行多年,但普通人在日常生活中仍然经常面临"这个垃圾到底属于哪一类"的困惑。我自己就经历过拿着外卖餐盒在四个垃圾桶前犹豫不决的尴尬时刻。
传统的解决方案无非几种:
- 纸质分类手册(携带不便且更新困难)
- 微信小程序(需要每次打开且功能单一)
- 原生App(开发维护成本高)
而我们的方案选择了Flutter+HarmonyOS 6.0的技术组合,这背后有几个关键考量:
- 跨平台优势:Flutter可以一套代码同时覆盖Android和HarmonyOS设备
- 性能表现:相比纯Web方案,Flutter的渲染性能更接近原生
- 生态适配:HarmonyOS 6.0对Flutter提供了更好的支持
- 开发效率:热重载特性大幅提升开发调试效率
提示:选择技术栈时,除了考虑技术特性,还需要评估团队熟悉度和社区支持度。Flutter在国内有活跃的开发者社区,遇到问题更容易找到解决方案。
2. 环境搭建与项目初始化
2.1 Flutter for HarmonyOS环境配置
在MacOS上配置支持HarmonyOS的Flutter环境需要特别注意几个关键步骤:
bash复制# 1. 安装HarmonyOS专用Flutter SDK
git clone -b harmony https://gitee.com/openharmony-sig/flutter.git
export PATH="$PATH:`pwd`/flutter/bin"
# 2. 检查环境依赖
flutter doctor
常见问题排查:
- 如果遇到"Could not find a Flutter SDK"错误,检查PATH设置是否正确
- 网络问题可能导致依赖下载失败,建议配置国内镜像源
- Java路径问题可以通过修改flutter doctor中的检测逻辑解决
2.2 项目创建与基础配置
使用以下命令创建项目并添加HarmonyOS支持:
bash复制flutter create --platforms=android,harmony zhi_fen_la_ji_tong
cd zhi_fen_la_ji_tong
flutter pub add provider http shared_preferences
关键配置文件说明:
pubspec.yaml:需要特别声明harmonyos平台支持build/harmony:HarmonyOS特有的构建配置目录lib/harmony:平台特定代码存放位置
3. 核心功能实现
3.1 垃圾分类数据库构建
我们采用了混合数据方案:
- 基础数据使用本地SQLite存储
- 更新机制通过HTTP API实现
- 用户查询记录使用SharedPreferences缓存
数据库表结构设计示例:
dart复制class TrashItem {
final int id;
final String name;
final String category; // 可回收/有害/厨余/其他
final String? description;
final String? imageUrl;
// 构造函数和toJson/fromJson方法
}
3.2 智能查询功能实现
核心查询逻辑考虑了多种匹配方式:
- 精确名称匹配
- 拼音首字母匹配
- 模糊关键词匹配
- 图像识别匹配(后续版本计划)
查询服务的核心代码结构:
dart复制class TrashSearchService {
final TrashDatabase _database;
Future<List<TrashItem>> search(String query) async {
// 实现多维度搜索逻辑
}
Future<TrashItem?> searchByImage(File image) {
// 预留图像识别接口
}
}
3.3 跨平台UI适配
使用Flutter的Platform API实现差异化的UI表现:
dart复制Widget build(BuildContext context) {
return Platform.isHarmonyOS
? _buildHarmonyOSUI()
: _buildMaterialUI();
}
针对HarmonyOS特别优化了:
- 系统主题适配
- 导航栏交互
- 动效性能优化
- 系统服务集成
4. HarmonyOS特色功能集成
4.1 原子化服务能力
HarmonyOS 6.0的原子化服务让应用可以无需安装即可使用核心功能。我们通过以下配置实现:
json复制// config.json
{
"abilities": [{
"name": "TrashSearchAbility",
"type": "service",
"visible": true,
"skills": [{
"actions": ["action.search.trash"],
"entities": ["entity.trash"]
}]
}]
}
4.2 分布式能力应用
利用HarmonyOS的分布式特性,实现:
- 手机查询后,结果同步到智能手表
- 跨设备收藏夹同步
- 多设备协同识别(如手机摄像头+平板显示)
关键代码实现:
dart复制void _initDistributed() {
DistributedDataManager.registerDataListener(_onDataChanged);
}
void _onDataChanged(String deviceId, String data) {
// 处理跨设备数据同步
}
5. 性能优化与测试
5.1 渲染性能优化
针对Flutter在HarmonyOS上的特别优化:
- 使用
RepaintBoundary减少不必要的重绘 - 优化列表项的
const构造函数 - 对于复杂动效使用
NativeSurface
性能对比数据:
| 场景 | 优化前(FPS) | 优化后(FPS) |
|---|---|---|
| 列表滚动 | 42 | 58 |
| 页面切换 | 36 | 52 |
| 搜索响应 | 28 | 45 |
5.2 内存管理策略
HarmonyOS的内存管理机制与Android有所不同,我们特别处理了:
- 图片缓存策略调整
- 大数据集的分页加载
- 后台服务的生命周期管理
内存使用对比:
| 状态 | 优化前(MB) | 优化后(MB) |
|---|---|---|
| 冷启动 | 78 | 62 |
| 持续使用 | 145 | 112 |
| 后台保持 | 53 | 31 |
6. 项目部署与发布
6.1 多平台打包配置
HarmonyOS应用的打包需要特别处理:
bash复制flutter build harmony
生成的HAP包需要通过DevEco Studio进行签名和发布。
6.2 持续集成方案
我们配置了基于GitHub Actions的CI流程,关键步骤包括:
- 多环境构建验证
- 自动化测试
- 构建产物归档
- 发布到AppGallery Connect
CI配置文件示例:
yaml复制jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: flutter pub get
- run: flutter test
- run: flutter build harmony --release
7. 实际开发中的经验教训
在开发过程中,我们积累了一些宝贵的经验:
-
状态管理选择:最初使用setState,后来切换到Provider,最终发现Riverpod更适合我们的场景。状态管理方案的选择应该考虑:
- 团队熟悉度
- 项目复杂度
- 长期维护成本
-
网络请求处理:我们实现了多级缓存策略:
- 内存缓存(30秒)
- 本地数据库缓存(7天)
- 强制刷新机制
-
跨平台差异处理:HarmonyOS和Android在一些细节表现上有所不同,特别是:
- 权限管理机制
- 后台任务限制
- 通知样式
-
用户反馈收集:我们内置了便捷的反馈入口,收集到的常见问题包括:
- 生僻物品分类不准
- 地方性分类规则差异
- 离线使用场景支持
这个项目最让我意外的是HarmonyOS对Flutter的支持程度。相比早期的兼容性问题,6.0版本已经能够很好地运行大部分Flutter应用,只是在一些平台特定功能上还需要额外适配。如果你也在考虑跨平台开发HarmonyOS应用,Flutter现在确实是个不错的选择。
