我前阵子把一套 Flutter 应用搬到了 OpenHarmony 设备上,目标是做一个 PUBG 游戏助手类的 App,核心功能是武器系统:武器图鉴、数据对比、伤害 / 击杀时间(TTK)计算。项目跑在 RK3568 开发板和部分 RK3588 设备上,整个过程中踩了不少坑,也把 Flutter for OpenHarmony 的成熟度摸了个底。这篇就当是一份实战记录,重点是武器系统的数据建模和核心计算模块,顺便把 OpenHarmony 真机适配上的那些问题一起说清楚。
如果你正好也在纠结“Flutter 在 OpenHarmony 上到底能不能做正经 App”,或者你想做工具类应用但不确定性能能不能扛住,这篇文章应该能给你一个比较可信的答案。
1. 为什么用 Flutter 做 OpenHarmony 上的武器图鉴
先说结论:Flutter 在 OpenHarmony 上不是玩具,但也不是完全无缝。它能写出流畅的 UI,跑复杂的本地计算也没问题,只是你得清楚它跟 Android 环境下的差异在哪里。
1.1 移动端跨端方案横向对比
我最早对比过三条路线:ArkUI 原生、React Native for OpenHarmony、Flutter for OpenHarmony。
ArkUI 原生的问题是效率。同样的武器列表、筛选面板、详情页,ArkUI 写起来并不慢,但数据层和 UI 层的组织方式更接近传统命令式开发,做复杂交互的时候状态管理成本高。再加上我自己团队的 Flutter 基础比较厚,不想为了一个工具类 App 重起炉灶。
React Native for OpenHarmony 当时的稳定版本还不够成熟,三方库的兼容性更差。我需要的只是列表、网格、图表、本地 JSON 解析,这些在 Flutter 生态里早就非常稳定了。
Flutter for OpenHarmony 实际上是 OpenHarmony SIG 移植的 flutter_flutter 分支,配合 DevEco Studio 和 OpenHarmony SDK 使用。它的渲染走的是自绘引擎,不依赖系统原生控件,所以 UI 一致性有天然优势。
| 对比维度 | ArkUI 原生 | RN for OpenHarmony | Flutter for OpenHarmony |
|---|---|---|---|
| 开发效率 | 中等 | 较高 | 较高 |
| UI 一致性 | 依赖系统组件 | 依赖桥接层 | 自绘引擎,一致性好 |
| 三方库生态 | 一般 | 较弱 | 强 |
| 状态管理 | 需要自己搭 | Redux 等 | Bloc / Provider / Riverpod |
| 性能表现 | 好 | 一般 | 好 |
项目最终选了 Flutter,还有一个原因是后续我还想加弹道模拟、配件推荐这类功能,这些都需要 Canvas 绘制和算法计算,Flutter 在这方面的支持远比 ArkUI 灵活。
1.2 项目边界:只做武器系统
很多游戏助手类 App 一上来就想做全功能:武器库、地图、战绩、攻略、社区。我的建议是拆小一点。这个项目的第一阶段只做武器系统,包含三块:
- 武器数据图鉴:查看所有枪械的基础属性、弹药类型、配件槽位
- 筛选与对比:按枪种、弹药、射速区间筛选,支持两把枪并排对比
- 伤害 / TTK 计算器:选择武器、配件、护甲等级、命中部位,计算结果
这个边界不是随便划的,它决定了数据模型怎么设计。如果你把武器、地图、装备全塞进一个数据库,后期的字段冲突会搞得你很难受。武器系统单独成模块,数据表自己维护,后续再叠加其他系统互不干扰。
1.3 用到的核心依赖与工程结构
工程结构上我用的是标准的 feature-first 目录:
code复制lib/
core/
models/ # 武器、配件、弹药的数据模型
services/ # JSON 解析、TTK 计算、数据缓存
utils/ # 数值取整、格式化等工具函数
features/
weapon_list/ # 武器列表页、筛选面板
weapon_detail/ # 武器详情页、配件展示
compare/ # 武器对比模块
widgets/ # 通用组件,比如 DamageBar、StatRow
依赖方面只保留了最核心的几个:
provider:状态管理,列表筛选状态、详情页数据共享用dio:未来在线更新数据用shared_preferences:缓存本地配置json_annotation:数据模型生成
提示:Flutter for OpenHarmony 并不是所有 pub.dev 包都能直接用。纯 Dart 包基本没问题,但涉及原生插件的包要先确认是否支持 OpenHarmony 平台。
shared_preferences有移植版本,path_provider也有,这两个我实测可用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 武器数据建模:从游戏数值到可计算的本地数据层
武器系统能不能做好,数据模型占一半。游戏里的一把枪,到了 App 里不是简单地存几个数字,而是要支持筛选、排序、计算,所以字段设计必须一次到位。
2.1 武器属性字段怎么设计才够用
我实际维护的武器数据有三十多个字段,但核心属性可以分成四组:
- 基础标识:ID、名称、枪种、弹药类型
- 伤害属性:基础伤害、射速、弹匣容量、有效射程
- 操控属性:垂直后坐力、水平后坐力、开镜速度、移动速度惩罚
- 配件信息:可装配件列表、可选用弹药类型
基础伤害、射速、弹匣容量这三个字段是 TTK 计算的核心,必须用数值类型而不是字符串。比如“射速”我统一用“每分钟发射次数”,而不是分什
