记账这事,说起来简单,但真正动手做一个让自己每天都愿意打开的记账 App,难度比想象中大得多。我去年年底把主力设备换成了鸿蒙系的手机之后,一直纠结一个问题:市面上成熟的记账应用不少,但数据都在别人服务器上,而且功能越做越重,开屏一堆广告。作为一个 Flutter 开发者,我天然想用自己最趁手的工具链去解决这个日常需求。于是就有了「记一笔 · MemoMoney」这个项目——一个跑在 HarmonyOS 6.0 上、用 Flutter 开发的个人理财助手,目前先把收入记录模块完整落地了。这篇文章就是记录我从环境配置、数据建模到编码实现、踩坑修复的完整过程,尤其是 Flutter 在鸿蒙真机上的兼容性细节,希望对打算在鸿蒙设备上做 Flutter 应用的朋友有实际帮助。
1. 为什么我坚持用 Flutter 做鸿蒙应用,而不是原生重写
1.1 记账应用的核心痛点不是功能少,而是"打开成本"太高
市面上大部分记账应用的首页信息密度极高,图表、账户、预算、理财推荐堆在一起,我每次想记一笔饭钱都要在界面上找半天入口。时间一长,记账这个习惯自然就放弃了。所以 MemoMoney 的第一设计原则是:从打开 App 到完成一笔收入记录,绝对不超过 5 秒。这个目标决定了技术选型必须足够轻量,UI 渲染必须足够快,而跨端一致性要好——我不希望以后 iOS、Android 甚至桌面端各写一套 UI,平白增加维护成本。
Flutter 的 Skia 自绘引擎在复杂列表和自定义动画场景下表现出色,而且布局代码可以完全控制像素级细节。对于记账这种需要大量自定义数字键盘和表单交互的应用,Flutter 比原生 ArkUI 更符合我的习惯。另外,团队里如果以后有其他成员参与,Flutter 的招聘和学习成本也远低于重新培养一套鸿蒙原生开发技能树。
1.2 鸿蒙适配现状:Flutter 不再是"二等公民"
很多人对 Flutter 跑鸿蒙的印象还停留在"实验性项目"阶段,实际上 OpenHarmony 社区对 Flutter 的适配已经推进了相当长的时间。当前主流做法是使用 OpenHarmony 官方维护的 Flutter 分支(基于 Flutter 主干定制),配合 DevEco Studio 构建鸿蒙侧的 Runner 工程。HarmonyOS 6.0 的 API 版本对 Flutter 插件的兼容度比前几个版本提升明显,大部分纯 Dart 包可以直接运行,只有涉及原生能力(图库、传感器、支付等)才需要写平台通道。
如果项目对 UI 一致性要求高、业务逻辑偏重,且团队已经熟悉 Flutter,那么用 Flutter 开发鸿蒙应用完全可行。相反,如果你的应用需要深度调用鸿蒙的分布式能力,比如跨设备流转、超级终端,那就老老实实走 ArkTS 原生路线,Flutter 在这些系统级能力上还隔着一层桥接的损耗。
1.3 项目整体架构:先跑通最小闭环
MemoMoney 的架构采用分层设计,UI 层全部用 Flutter Widget 实现,业务状态用 Provider 管理,数据层通过抽象 repository 接口隔离数据库实现,底层先用内嵌数据库做本地持久化。当前版本聚焦收入记录模块——因为收入数据的字段相对固定,但金额、分类、时间、备注的边界条件很多,非常适合先把数据模型和增删改查跑扎实。分模块迭代的好处是每一块都能独立验证效果,不需要等到所有功能做完才能使用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从零搭建 Flutter × HarmonyOS 6.0 开发环境
2.1 获取正确的 Flutter SDK 分支
这一步是新手最容易踩坑的地方。直接用 flutter.dev 下载的官方稳定版 SDK 是没办法构建鸿蒙应用的,必须切换到 OpenHarmony 的 Flutter 适配分支,或者使用社区维护的 flutter_flutter 仓库中基于 ohos 的分支。具体操作步骤如下:
bash复制git clone https://gitee.com/openharmony-sig/flutter_flutter.git
cd flutter_flutter
git checkout master
克隆完成后,把 bin 目录加入 PATH 环境变量。注意不要同时把官方 Flutter SDK 的两个 bin 目录都暴露在 PATH 里,否则 flutter doctor 会检测到多个版本,出现各种奇怪错误。我一开始就吃过这个亏——同时存在两个 flutter 命令位置,导致 pub 缓存路径错乱,依赖包下载后始终无法被正确解析。
验证环境配置是否正确,可以运行:
bash复制flutter --version
flutter doctor
如果版本号显示的是基于 OpenHarmony 定制的分支版本,并且 doctor 列出了 DevEco Studio 的路径,说明基础环境没问题。
2.2 版本匹配:Flutter、Dart、DevEco Studio 和鸿蒙 SDK
版本匹配是另外一个大坑。热搜里反复出现的"flutter 各个版本不对导致依赖包下不下来",核心原因基本都出在版本矩阵不匹配。我这里整理了一份当前我实测可用的稳定组合:
| 组件 | 版本 | 说明 |
|---|---|---|
| Flutter SDK | ohos 分支 master(2025.11 后) | 需 |
