上周我把一个跑在 Android 上的 Flutter 应用搬到 OpenHarmony 开发板上,第一件事就是要复刻原来的通讯录分组列表。分组列表这个需求看起来简单——无非是“组头 + 行数据”交替渲染,但等你真到了 OpenHarmony 这套工具链上,才发现性能、适配、插件全都要重新过一遍。这篇文章不打算做泛泛的入门科普,而是从我在 RK3568 开发板上跑通 Flutter 分组列表的完整过程出发,把数据模型设计、滚动性能优化、吸顶组头实现,以及 OpenHarmony 特有的踩坑点一起讲清楚。适合已经有 Flutter 基础、正准备把项目移植到 OpenHarmony 的开发者,也适合在鸿蒙设备上做联系人、设置页、商品分类这类界面的同学参考。
1. 为什么是 Flutter 加 OpenHarmony:这套组合的边界在哪里
1.1 这次需求是什么
先说场景。我手上的项目原本是 Android 端的 Flutter 应用,功能里有通讯录、设置页、商品分类三个模块,全都是典型的分组列表:顶部是分组标题,下面跟着若干行数据,滚动时分组标题要吸顶,右侧最好还有字母索引条。产品经理给的要求是“体验和原生一致”,落到技术上就是三件事:
- 大量数据下滚动不能掉帧;
- 组头吸顶不能闪烁;
- 索引条拖动能快速定位。
这些东西在 Android 上的 Flutter 里已经被社区验证过无数遍,但 OpenHarmony 是另一套系统,渲染引擎、输入事件、生命周期都有差异。我选择用 Flutter for OpenHarmony,核心原因只有一个:团队已经有 Flutter 技术栈,如果为了一个模块去学 ArkUI 再加一轮原生开发,成本上不划算。先把边界摸清楚,再决定值不值得投入,这是移植前最该做的事。
1.2 Flutter 在 OpenHarmony 上到底成熟到什么程度
如果你是第一次接触这套组合,先降低预期。OpenHarmony 的 Flutter 不是 Google 官方维护的,而是 OpenHarmony SIG 在 Gitee 上维护的 fork,分为 flutter_flutter(Dart 框架层)和 flutter_engine(引擎层)。基础 Widget 大部分能用,ListView、ScrollView、Text、Image 这些核心组件表现稳定,但有两个明显的短板:
- 第三方插件生态不完整。pub.dev 上有大量插件只有 Android/iOS 实现,没有 ohos 平台实现,要么等社区移植,要么自己写 MethodChannel 桥接;
- API 版本滞后。引擎版本一般落后官方 Flutter 一到两个大版本,新出的 Widget 不一定可用,比如某些 Sliver 相关的新特性在 OHOS 分支上可能还没合入。
我用一张表概括当时做选型对比的结论:
| 维度 | ArkUI 原生 | Flutter for OpenHarmony |
|---|---|---|
| 开发效率 | 需要新学一套语言和框架 | 复用 Flutter 技能,上手快 |
| 列表性能 | 系统级优化,滚动最稳 | 引擎适配后性能尚可,但需主动优化 |
| 插件生态 | 需要原生开发 | 大量插件缺 ohos 支持 |
| 跨端一致性 | 只能在鸿蒙系设备 | 一套代码覆盖 Android / OpenHarmony |
结论很明确:如果你的目标设备只有 OpenHarmony,且团队没有 Flutter 基础,ArkUI 是更稳的选择;如果像我一样要同时覆盖 Android 和 OpenHarmony,Flutter 的统一代码优势就体现出来了。分组列表恰好是检验这套组合是否可用的试金石——它同时考验滚动、触摸、文本渲染和桥接能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发环境就位:Flutter SDK、OHOS SDK 与 RK3568 设备树的选择
2.1 先锁 flutter_flutter 分支,再谈其他
OpenHarmony 的 Flutter SDK 必须用 SIG 的 fork,别去官方源拉。版本匹配是第一道门槛,我见过太多人因为分支选错,flutter create 生成不了 ohos 目录,或者 build 到一半报一堆编译错误。
推荐的做法:
bash复制git clone https://gitee.com/openharmony-sig/flutter_flutter.git -b OpenHarmony-4.1-Release
export PATH=$PWD/flutter_flutter/bin:$PATH
分支名和你板子上的 OpenHarmony 系统版本要对应。比如板子刷的是 OpenHarmony 4.1,就选 OpenHarmony-4.1-Release 分支。这里有个小坑:克隆完成后,先执行 flutter --version 确认 PATH 生效。很多教程没说清楚,Windows 上改完环境变量要开新终端才生效,macOS 上则要 source ~/.zshrc。热搜词里那句“path 需要新终端生效”就是无数人踩过的第一步。
然后执行 flutter config --enable-ohos,这一步是为了让 Flutter 工具链识别 ohos 平台。执行完你可以跑一下 flutter doctor -v,看看 ohos toolchain 有没有被正确识别。如果 flutter create 时没有 --platforms ohos 选项,基本就是上面某一步没做对。
