做 OpenHarmony 应用开发,最头疼的往往不是业务逻辑,而是"界面怎么跑起来"这一层。尤其是团队里已经有 Flutter 技术积累的情况下,每个新系统都要维护一套原生代码,成本直接翻倍。我这次把 Flutter 的 OpenHarmony 分支用在了身体健康状况记录 App 上,专门把饮水记录模块完整做了一遍,从环境搭建、数据持久化到真机调试都踩过不少坑,这篇就把核心实现和排坑记录整理出来,给同样想用 Flutter 做 OpenHarmony 应用的朋友做个参考。
先说清楚这个 App 是干什么的。身体健康状况记录 App,核心场景是帮用户每天记录心率、血压、体重、睡眠、饮水这些健康指标,然后形成趋势图。饮水记录是其中最简单也最有代表性的模块:用户点按钮添加一杯水,系统记录时间和毫升数,首页展示今日累计饮水量和进度。麻雀虽小,但它覆盖了"UI 交互 + 本地存储 + 状态管理 + 页面刷新"这条完整链路,非常适合作为 Flutter 在 OpenHarmony 上落地的第一个实战模块。
1. 项目概述:为什么选 Flutter 来做 OpenHarmony 应用
1.1 这套技术组合怎么来的
OpenHarmony 官方主推的是 ArkTS + ArkUI 声明式开发,组件生态也在快速补齐,这个必须承认。但我接触到的实际业务团队里,不少核心开发是 Flutter 背景,仓库里已经有大量现成的 Dart 业务组件和状态管理逻辑。如果全部迁到 ArkTS,光把页面重写一遍就是两到三周的工作量,还没算上调试和回归测试的时间。
Flutter for OpenHarmony 走的是社区 SIG 维护路线,把 Flutter engine 的 OpenHarmony 后端补齐了,Dart 层 API 和上游保持基本一致。这意味着团队里熟悉 Flutter 的人几乎不需要重新学习,就能把应用跑到 OpenHarmony 设备上。实际用下来,这个分支的完成度比我预想的高,常规页面开发完全可行,甚至比一些早期预览版流畅得多。
1.2 饮水记录模块要解决什么问题
饮水记录功能表面上很简单,但真正做起来有几个核心问题绕不开:数据存哪里、怎么保证 App 杀掉重启后数据还在、今日累计值怎么实时刷新。这几个问题如果不在最开始设计好,后面加心率、血压模块时会非常痛苦。
我的做法是把它拆成三层:数据层负责 WaterRecord 模型的增删改查;逻辑层负责计算今日总饮水量、距离目标的进度;界面层拆成首页进度环和添加记录的快捷面板。这样模块之间边界清晰,后面加"饮水提醒"或者"周统计报表"时,只需要在对应层做扩展。
1.3 适合哪些人来参考
如果你正在评估 OpenHarmony 应用的技术选型,或者已经决定用 Flutter 但卡在环境搭建和真机运行上,这篇对你会很有用。我会把操作细节和坑点讲得比较细,就算你是第一次接触 OpenHarmony,跟着走也能把工程跑起来。如果你已经在做 OpenHarmony 原生开发,这篇也能帮你了解 Flutter 方案的数据存储和页面交互是怎么实现的,做个技术对比。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与工程创建
2.1 Flutter 的 OpenHarmony 分支怎么配置
首先要明确一件事:官方 Flutter SDK 默认不支持 OpenHarmony,直接 flutter create 出来的工程没有 ohos 平台目录。必须使用 OpenHarmony 社区维护的 flutter_flutter 分支,并配合对应的 flutter_packages 仓库。
实际操作时我建议这样配置,先准备好两个目录:
bash复制# 克隆 OpenHarmony 的 Flutter SDK 分支
git clone https://gitee.com/openharmony-sig/flutter_flutter.git -b master
# 克隆插件仓库
git clone https://gitee.com/openharmony-sig/flutter_packages.git
然后把 flutter_flutter 的 bin 目录加到 PATH 里,和本机已有的标准 Flutter SDK 区分开。这里有个很容易踩的坑:如果你之前用过标准 Flutter,环境变量里可能已经有一个 flutter 指向了官方 SDK。我建议在 .bashrc 或 .zshrc 里单独加一个别名,比如 fho,专门指向 OpenHarmony 分支,避免两个 SDK 混用。
bash复制export PATH="$HOME/dev/flutter_flutter/bin:$PATH"
配置完之后跑一下 flutter doctor,如果看到 Flutter (Channel master, XX.XX.X) 并且底下有 OpenHarmony 相关的提示,说明 SDK 部分基本就绪。
2.2 创建项目和添加 ohos 平台目录
标准 Flutter 工程创建项目后,默认只有 android、ios、web 这些目录。要支持 OpenHarmony,需要执行社区提供的脚本或命令来生成 ohos 目录。不同版本方式不太一样,但大致思路是编译 tool 后执行:
bash复制flutter create --platforms ohos my_health_app
cd my_health_app
如果当前分支支持 --platforms ohos,会直接生成 ohos/ 目录。如果版本还没有这个参数,需要手动把 flutter_packages 里的模板工程拷过来,再修改包名和应用名。
生成后的工程结构大概是这样的:
code复制my_health_app/
├── lib/ # Dart 业务代码
├── ohos/ # OpenHarmony 原生工程
│ ├── entry/src/main/
│ │ ├── ets/ # ArkTS 入口与 UIAbility
│ │ └── resources/ # 应用图标、字符串资源
│ └── build-profile.json5
├── pubspec.yaml
└── ...
