这场测试要从一个很现实的场景说起。公司接了个需求,要把一款存量 App 同步覆盖到鸿蒙设备上,但团队没有单独养一套原生鸿蒙人力。摆在眼前的选择无非两条:招一拨人用 ArkTS 从零写,或者让现有的 Flutter 客户端试着跨过去。前者预算超太多,后者没人敢打保票。于是我用两个礼拜拉了一个技术预研项目,题名就叫"默契测试"——测的不是两个人,而是 Flutter 框架和鸿蒙开发环境这两个新搭档的契合度。
这个测试做完,我的结论很明确:Flutter 跨平台开发鸿蒙这条路已经能走,但绝对没有你想的那么平坦。它能跑、能调、能上真机,可中间要趟的坑远比官方文档写的多。下面把整个测试过程、环境搭建、报错排查、默契度评分全部摊开,给打算入坑的同学当个参考。
1. 为什么要把 Flutter 押在鸿蒙这一局里
动手之前,先想清楚一个问题:一边是 Flutter 官方至今没有正式把 ohos 列为稳定支持平台,一边是鸿蒙原生开发工具链已经相当完善,为什么还要做这个"不合常规"的尝试?原因无非两条,一条是被市场和成本逼的,一条是技术上确实有得谈。
1.1 三个客户端并行维护,团队已经快扛不住了
很多做 To B 和工具类产品的团队,现状非常清楚:Android 一套、iOS 一套、马上鸿蒙又来一套。如果鸿蒙也走原生,意味着同一个功能要写三遍,三套需求对齐、三套 Bug 修复、三套发版节奏。中小团队根本养不起这个人力,就算养得起,反复在三套代码之间切上下文也会把效率拖垮。
Flutter 的价值恰好在这里:一套 Dart 代码,UI 层自行渲染,业务逻辑全在引擎里跑,天然跟底层系统解耦。既然它能跨 Android、iOS、Web、桌面,那么只需要有人补上鸿蒙的平台适配层,理论上就能把同一份代码再编译成鸿蒙应用。这个"适配层"就是鸿蒙开发社区里做的 flutter_flutter 分支和配套的引擎产物。所以从战略上讲,这个方向值得赌。
1.2 Flutter 在鸿蒙上不是套壳,而是真跑引擎
有一种误解觉得跨平台跑鸿蒙就是塞个 WebView 或者远程桌面,那是 Xamarin 时代的老想法了。Flutter 跨平台的核心是三层结构:
- Dart 层负责业务逻辑和 Widget 树;
- 引擎层(Flutter Engine)负责渲染、布局、文字排版、手势处理;
- 平台通道(Platform Channel)负责调用原生能力,比如蓝牙、定位、相机。
放到鸿蒙环境里,Flutter 引擎是被编译成鸿蒙的原生动态库集成进 HAP 包的。引擎自己用 Skia 或 Impeller 渲染 UI,不需要依赖 ArkUI 的组件树。也就是说,你在 Flutter 里写 100 个页面,这 100 个页面全部由引擎画出来,鸿蒙只负责提供一个空的容器给引擎。这个机制保证了 UI 的高度一致性,也解释了为什么 Flutter 跨平台应用在哪个系统上都长得"一个样"。
1.3 所谓"默契测试",到底在测什么
我预研时定的测试范围,只挑三种最有代表性的场景,不贪多。第一个是纯 UI 页面跑通,验证引擎在鸿蒙上能不能稳定渲染、列表滑动、动画是否流畅。第二个是平台通道对接,用 Flutter 侧调用鸿蒙原生能力来回传数据,验证原生和平台的桥接是否顺畅。第三个是第三方插件兼容性,看看现有项目的依赖在 ohos 平台上缺多少、补起来要多费劲。
这三个场景覆盖了"能跑、能通、能用"三个层次。如果全绿,那后续把完整业务迁过去就有谱了;如果某一层卡死,也能及时止损。下文所有过程,都是围绕这三个层次逐步展开的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 搭建 Flutter 鸿蒙开发环境:版本矩阵与工具链排雷
这个环境搭建,是入手后第一个大坑。因为网上很多教程都在列步骤,但没人告诉你版本组合错了会翻车,也没人告诉你有些报错根本不是你的问题,纯粹是工具链和你操作系统之间闹别扭。
2.1 需要准备的完整工具清单
先列一张工具表,我这次用的版本组合也标在里面,你照着一比一配,能少走一半弯路。
| 工具 | 作用 | 我使用的版本/说明 |
|---|---|---|
| DevEco Studio | 鸿蒙官方 IDE,负责调试、签名、打包 HAP | 5.0.3 Release(基于 IntelliJ 的那套) |
| OpenHarmony SDK | 提供鸿蒙编译所需的 SDK 与工具链 | API 12 配套 SDK Platform |
| Flutter SDK(ohos 分支) | 支持编译目标平台 ohos 的 Flutter SDK | 使用社区 flutter_flutter 的 ohos 分支,版本基线 3.22.x |
| FVM | Flutter 多版本管理器,切换不同分支必备 | 最新稳定版 |
| hdc 命令行工具 | 鸿蒙设备连接、安装、获取日志的命令行 | 随 DevEco Studio 附带 |
| Node.js 与 ohpm | 鸿蒙的包管理与部分脚本依赖 | 建议 Node 18+,ohpm 随 SDK 附带 |
这里最核心的东西是 Flutter SDK 的 ohos 分支,它不是从官方仓库直接 flutter upgrade 能拿到的,需要从对应的 GitHub 仓库拉特定分支编译。第一批踩坑的人几乎全挂在"用了官方 Flutter 想编 ohos"这种思路上,编译到一半直接报 Unknown platform,白折腾。
2.2 版本选择,是整个环境的生死线
说句不夸张的话,这个项目里版本选择比代码本身更容易让你崩。原因很简单:ohos 分支的 Flutter 跟随的是主线某个特定节点,而这个节点又必须匹配 OpenHarmony SDK 的 API 版本,三者任何一个对不上,后面全是雷。
我最终稳定运行的一套版本组合是: flutter_flutter 仓库的 ohos 分支(基线 Flutter 3.22.x)+ OpenHarmony SDK API 12 + DevEco Studio 5.0.x。这套组合在今天来看已经是相对成熟的了。如果你拿更新的 Flutter 主线去跑,则要确认对应 ohos 分支是否合并了新引擎;拿旧版本 SDK,则可能因为 API 接口不匹配导致构建失败。
安装完基础环境后,务必执行一遍 flutter doctor -v,把环境中缺的东西一次性看清。注意不要忽略输出里的 warning,尤其是关于 ohos toolchain 的告警。这个命令在 Windows 机器上特别容易暴露另一个问题,就是我们即将在下文提到的 Visual Studio 工具链报错。
2.3 一个高频报错:unable to find suitable visual studio toolchain
很多 Windows 用户在配置 Flutter 环境时都会碰到一个神级报错,网上的说法五花八门,实际输出长下面这样:
code复制flutter doctor --verbose
...
[!] Visual Studio - develop Windows apps
✗ Unable to find suitable Visual Studio toolchain.
Please run `flutter doctor` for more details.
甚至有人在编译 Android 或有原生依赖的工程时,也会看到和 Visual Studio 工具链相关的报错。这个问题的本质不在于 Flutter 本身,而是 Windows 平台编译原生 C++ 代码时缺少底层的编译工具链。Flutter 在 Windows 上需要 Visual Studio 自带的 MSVC 编译器与 Windows SDK 来做本地构建,而很多人装机时只勾选了"使用 C++ 的桌面开发"以外的工作负载,或者 VS 版本过老。
解决方法不复杂:打开 Visual Studio Installer,找到已安装的 Visual Studio 对应版本,在"单个组件"里确保勾选了 MSVC 编译器(具体版本按 Flutter 官方要求)和 Windows 10/11 SDK,重启终端之后报错就消失。如果不想为了这个装完整的 Visual Studio,也可以用 Build Tools for Visual Studio 单独装 C++ 工具集,实测也能过 doctor 检查。但很多项目后续还要编 Windows 插件或桌面端,所以直接装全量 VS 是省心选择。
2.4 为什么我会建议强制用 FVM 管理多版本
我见过太多人本地只有一条 Flutter 路径,平时感觉没毛病,直到需要同时维护一个官方版本项目和一个 ohos 分支项目时就开始打架。FVM 的核心价值就是解决这种"多版本并存"的需求。它的配置思路很简单:
- 通过
fvm install安装指定版本的 Flutter 到 FVM 的缓存目录; - 在某个项目根目录执行
fvm use <版本>,生成 .fvmrc 配置; - 跑命令时统一用
fvm flutter xxx替代直接打在系统中的flutter; IDE 里也要把 Dart/Flutter SDK 路径指向项目下的 .fvm 缓存目录,避免 IDE 用了全局版本导致版本错乱。
这里有个很容易忽略的坑:FVM 缓存目录和项目目录如果不在同一磁盘分区,某些版本的下载解压和缓存符号链接可能出问题。建议直接在系统盘靠前的目录统一安装,路径里不要带中文和空格。
环境搭好了,接下来做的就是项目实战,也就是把一套代码真正送到鸿蒙真机上。
3. 从创建项目到编译上真机的完整路径
前面阶段全是准备工作,这一节开始就是真正的"动手干活"。我自己按照从零到真机运行的顺序重新走了一遍,确保每个环节都能复现。
3.1 用 ohos 分支创建跨平台项目
Flutter 官方分支创建项目可以用 --platforms 参数指定要支持的目标平台。在 ohos 分支中,多了一个选项,创建命令如下:
bash复制fvm flutter create --platforms ohos --org com.example harmony_test_app
执行完成后,对比普通 Flutter 项目,最直观的区别是顶层多了 ohos/ 目录。这就是 Flutter 为鸿蒙生成的宿主工程壳,里面包含 ohos.build 配置文件、entry/src/main 下的 Module 代码和资源文件、AppScope 下的应用级配置。整个项目和 DevEco Studio 的标准鸿蒙工程结构基本对齐,所以后续可以用 DevEco 直接打开 ohos/ 目录进行签名和构建。
如果你在 --platforms 里同时指定 android 和 ohos,会得到一份同时具备两个平台壳的工程。这样同一套 Dart 代码可以分别编译成 APK 和 HAP,这也是我们最终想要的"跨平台"效果。但要注意,两种平台壳的构建配置是独立的,后面排坑也是各排各的。
3.2 写一个能汇集所有典型问题的测试页
为了验证 UI 渲染和基础交互,我不跑官方 Demo,自己写了一个带列表、加载网络图片、下拉刷新、跳转详情的页面。这个页面的代码很常规:
dart复制import 'package:flutter/material.dart';
void main() {
runApp(const HarmonyTestApp());
}
class HarmonyTestApp extends StatelessWidget {
const HarmonyTestApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '默契测试',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
),
darkTheme: ThemeData.dark(),
home: const ProductListPage(),
);
}
}
选这个页面是有讲究的。列表页能测滚动性能和复用机制,网络图片能测 dart:io 的 HTTP 栈在鸿蒙上是否正常,路由跳转能测 Navigator 栈,明暗主题切换则能测试引擎对系统主题的感知。这些都是跨平台项目最常见的功能,也是最容易出现"在 Android 上没事、换系统就翻车"的部分。
3.3 构建流程与 hvigor 的关系,以及一个关键认知
鸿蒙端的构建不是 Flutter 直接出 HAP,它的流程比 Android 复杂一点。Flutter 侧负责把 Dart 代码编译成 libapp.so(AOT 产物),再把产物和引擎的 .so 库塞进鸿蒙工程的资源目录;随后 DevEco 的构建工具 hvigor 把这个壳工程打包成可安装的 HAP。也就是说,整个过程被拆成了两段:
text复制Flutter 编译阶段:Dart 源代码 -> libapp.so + Flutter 引擎库
hvigor 打包阶段:libapp.so + 鸿蒙壳工程 -> harmony_test_app.hap
在终端里,可以通过 fvm flutter build hap 触发完整的构建流程。第一次构建耗时比较久,因为要下载依赖并把 C++ 部分重新编译;后续增量构建就快很多。如果你是先在 Flutter 侧写好大量页面再一次性打包,项目结构很复杂时,构建时间拉长是正常的,不代表环境有问题。
3.4 连接真机、签名与安装,里面的细节远比你想象的多
鸿蒙开发调试最锻炼耐心的地方,就在"连接真机"这一步。相比 Android 开个 USB 调试就行,鸿蒙真机需要把当前设备的 UUID 注册到应用签名里才能安装,也就是经典的"自动签名"流程。
在 DevEco Studio 里,通过 File > Project Structure > Signing Configs 可以登录华为账号,并让 IDE 自动为项目生成签名材料。这个步骤做过一次之后,构建工具会把签名信息写进构建配置,之后命令行构建也能复用。
连接设备时,先确认 USB 调试模式已打开,并安装好对应设备的驱动。设备连接成功后,通过 hdc list targets 应该能看到设备序列号。如果 hdc list targets 死活看不到设备,大概率是 DevEco Studio 自带 hdc 的版本和当前 SDK 不一致,或者驱动缺失,而不是线材的问题。
安装 HAP 用命令行非常方便:
bash复制hdc install path/to/your_app.hap
如果不想敲命令行,也可以直接在 DevEco Studio 里点 Run 按钮,IDE 会帮你完成签名、编译、安装、启动全流程。真机调试阶段的日志可以通过 hdc hilog 查看,Flutter 侧的 debugPrint 输出会混合在系统日志里,需要过滤关键字才能看得清。
4. 磨合期翻车实录:那些我必须写下来的报错与排查
任何新技术栈上手都逃不过报错,鸿蒙的 Flutter 开发更是如此。以下三个问题是我整个测试过程中花时间最多的,每一个都真实到让人血压升高,但排查清楚后又觉得"原来如此"。
4.1 Gradle 插件的新旧两种应用方式冲突
这个报错哪怕你只做纯鸿蒙工程,也可能在构建时碰到。完整的报错信息长这样:
text复制You are applying Flutter's main Gradle plugin imperatively using the apply script method,
which is not supported anymore.
Please migrate to the Plugin DSL usage.
这个报错翻译成人话就是:你在用老式的 apply script 方式加载 Flutter 的 Gradle 插件,但新版本的 Gradle 已经不支持这种操作了。原因是 Flutter 官方对 Android 构建脚本做过一次比较大的调整,把传统写在 android/build.gradle 里的 apply from: "$flutterRoot/packages/flutter_tools/gradle/app_plugin_loader.gradle" 这种写法,迁移到了基于 pluginManagement 的声明式 DSL。如果你的项目同时改造过,或者从老工程升级过来,就很容易残留旧写法。
解决方法分两步。先在 android/settings.gradle 里声明插件仓库:
gradle复制pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}()
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
再在 android/app/build.gradle 顶部用 plugins 块替代原来的 apply 写法:
gradle复制plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
改完记得清理一遍 Gradle 缓存,再重新构建。这个报错的根源本质上不是 Flutter 鸿蒙适配的问题,而是 Gradle 版本演进带来的副作用,但假如你从来没在 Android 侧深究过,遇到时很容易看成是 ohos 平台的问题,白排查半天。
4.2 第三方插件在 ohos 平台上"查无此人"
这是跨平台移植里最伤筋动骨的问题。项目里用了十几个 pub.dev 的第三方包,比如网络库 dio、状态管理 provider、本地存储 shared_preferences,这些纯 Dart 包在 ohos 上都能直接用,因为它们的底层要么是纯 Dart 实现,要么只是用了 dart:io 标准库。真正出问题的是一类依赖平台通道的插件,比如 permission_handler、flutter_blue_plus、camera 等,它们只实现了 Android/iOS 的桥接代码,并没有 ohos 实现。
我拿 flutter_blue_plus 做蓝牙低功耗测试的时候,插件的 Android 实现是没问题的,但一旦切到 ohos 构建,编译直接报找不到对应平台实现。这个问题的本质是:Flutter 的插件机制规定,每个平台都需要一个实现了 Plugin 接口的注册类,而 ohos 目前并不是所有插件作者都会主动适配的。
解决办法有几个方向:
- 如果只是小范围调用原生能力,比如读取系统版本、获取设备信息,建议自己写一个双端兼容的 MethodChannel,在 ohos 侧用 ArkTS 实现同一个通道名,代码不复杂,完全可控。
- 如果是蓝牙这种复杂原生能力,优先看 ohos 对应的 SDK 是否提供替代插件,再考虑自己封装鸿蒙原生能力桥接。
- 迫不得已时,用条件编译把 flutter_blue_plus 的调用隔离开,鸿蒙端走自己封装的通道,其他端走原有插件。
纯粹用 Flutter 做顶层 UI,鸿蒙适配其实不痛。真正的痛感和工作量,全在插件这一层。所以立项前建议把依赖清单里每个包的平台支持情况过一遍,列个表格评估工作量,而不是等编译期炸了再想办法。
4.3 引擎渲染变快了,但也更"挑食":Impeller 的兼容性问题
Flutter 3.22 分支对应的是 Skia 和 Impeller 渲染引擎过渡阶段。ohos 分支里,默认可能还是走 Skia,但如果某天你把引擎切到 Impeller 渲染模式,在某些麒麟芯片的老机型上可能会看到部分模糊效果不正常、或者某些自定义 Shader 着色异常。这属于渲染引擎在特定 GPU 驱动上的兼容问题,不是鸿蒙适配的锅,但确实影响体验。
排查这类问题有一个笨办法但很有效:先关掉 Impeller,回到 Skia 渲染对比。如果恢复正常,就是 Impeller 与设备驱动的兼容性;如果问题依旧,再去查上层 UI 代码。具体关闭方式是在 AndroidManifest 或鸿蒙工程的入口配置里加一行开关,把渲染模式切回 Skia。对大多数业务 App 来说,Skia 的性能也已经够用,不必强求 Impeller。
4.4 排错思路的复盘:先分层,再定位
走过这些坑之后,我总结了鸿蒙 Flutter 调试时的排错优先级。遇到任何报错,先判断它属于哪一个层级:
| 报错层级 | 典型表现 | 优先排查方向 |
|---|---|---|
| Dart 层 | 堆栈里有 package: 开头 | 业务代码或包版本冲突 |
| 引擎层 | 堆栈里有 flutter engine 字样 | 切换渲染后端、检查 GPU 兼容 |
| 桥接层 | 报 MissingPluginException | 检查插件是否注册、通道名是否一致 |
| 原生构建层 | 编译中断、链接失败 | 检查 Gradle/hvigor 配置、SDK 版本 |
这个分层思路帮我快速过滤了大量无效信息。很多问题看着像 Flutter 代码的问题,实际堆栈定位到原生编译阶段,折腾半天才发现是 SDK 版本没对上。所以一定要养成先看完整日志、再动手改代码的习惯。
5. 实测报告:Flutter 与鸿蒙的默契度评分
整个测试走完,光"能跑"还不够,我要的是系统性的评估结果。下面按几个关键维度给出我的真实体验,同时也提醒哪些场景适合这套方案,哪些场景千万别上。
5.1 分项评测结果
| 维度 | 评分(满分5分) | 实际表现 |
|---|---|---|
| UI 渲染一致性 | 4.5 | 同一套代码在三端渲染效果基本一致,圆角、阴影、字体均有高还原度 |
| 启动性能 | 4 | 冷启动略慢于原生 ArkUI,但差距肉眼几乎不可感知,业务页面流畅 |
| 打包体积 | 3.5 | HAP 包比纯原生大不少,主要是引擎 .so 的体积,可用动态加载优化 |
| 开发效率 | 4.5 | Dart 代码跨端复用率极高,UI 迭代速度明显比原生快 |
| 插件生态 | 2.5 | 纯 Dart 包无压力,原生桥接插件缺 front,是最大短板 |
| 调试体验 | 3.5 | 热重载可用,但日志混合在 hilog 里筛选麻烦,断点调试偶尔失灵 |
| 社区成熟度 | 3 | 文档和教程在变多,但对比 Android/iOS 生态仍显匮乏 |
这套打分的核心结论是:Flutter 和鸿蒙的"默契"是好用的,但还没到亲密无间的程度。 它在 UI 层和业务层配合得很顺,在原生插件层则经常需要人为补位。
5.2 启动速度与安装包体积的直观数据
我在同款设备上跑了同一个项目的鸿蒙原生版、Flutter 版做对比。Flutter 版的 HAP 包大小约 65MB,其中引擎相关 so 文件占了 47MB。原生 ArkUI 版包体只有不到 15MB。启动速度上,Flutter 版冷启动大约 1.2 秒,原生版 0.9 秒;页面加载完成后,列表滚动和页面转场的帧率都稳定跑满 60fps,没有掉帧感。
如果你对包体和启动时间特别敏感,比如做的是工具类应用、目标用户手机配置普遍不高,那要慎重考虑。我自己的判断是,业务型 App 对这点差距不敏感,但工具类和 SDK 类产品就值得多权衡。
5.3 这套组合到底适合什么业务
经过实测,我认为 Flutter + 鸿蒙这套组合,适合且仅适合以下场景:
- 已有 Flutter 跨平台应用,需要低成本把鸿蒙纳入覆盖范围;
- 核心业务以信息展示、交互操作为主,对原生系统级能力依赖不深;
- 团队已具备 Flutter 开发能力,没有多余人力另组鸿蒙原生团队;
- 产品对启动包体积不是极度敏感。
反之,如果产品重度依赖鸿蒙的系统级服务(比如超级终端流转、分布式软总线、万能卡片等特色能力),需要调用大量原生鸿蒙 API,或者对启动速度和包体有极致要求,那还是老老实实走 ArkTS 原生开发。跨平台框架做得再好,它也是"跑在鸿蒙上的外来户",对系统级能力的掌控深度永远比不上一等公民。
6. 给跃跃欲试的后来人:工具链、学习顺序与心态
最后聊点实在的建议,包括编译器选择、学习路线和一些关于生态的实话。这些内容不算高深,但能让你少走很多弯路。
6.1 编译器选择:不是二选一,而是分工协作
很多刚开始接触的人会纠结"vs code 能不能开发 Flutter 鸿蒙应用"、"是不是必须用 DevEco Studio"。我的答案是:两个都要装,角色不同。
VS Code 用来写 Dart 代码体验极佳,Flutter 的代码补全、热重载提示、调试器都比 DevEco 里那套顺手。而 DevEco Studio 则负责 HarmonyOS 侧的工程管理、签名配置和 HAP 打包。这两个工具并不冲突,你完全可以平时用 VS Code 写 Flutter 层的业务代码,需要编鸿蒙包时再切到 DevEco。
要特别注意的一点是 IDE 里的 Flutter SDK 路径配置。如果你用了 FVM,在 VS Code 的 settings.json 里要把 dart.flutterSdkPath 指向项目目录下的 .fvm/flutter_sdk,否则 IDE 会去用全局 Flutter SDK,进而引发版本错乱。这个坑我至少见三个人踩过,排查半天都找不到原因。
6.2 我建议的学习顺序:先原生,再跨平台
如果你现在对鸿蒙完全零基础,我建议先在 DevEco Studio 里写一个最简单的 ArkTS 应用,把工程结构、hvigor 构建流程、hdc 命令行这些概念过一遍,再来碰 Flutter ohos 分支。原因很简单:Flutter 鸿蒙开发把问题拆成两层,你至少得知道鸿蒙侧长什么样,否则遇到原生构建报错时完全无从下手。
整个学习路径可以这样安排:
- 用 DevEco 创建 ArkTS 工程,点击运行到模拟器或真机,理解鸿蒙工程的基本结构;
- 学习 hvigor 构建产物和 hdc 常用命令,至少会手工安装 HAP、看 hilog 日志;
- 切换到 Flutter ohos 分支环境,跑通"创建工程->编译 hap->真机安装"这条链路;
- 试着用 MethodChannel 在 Flutter 和 ArkTS 之间传一次数据,理解桥接原理;
- 再回过来写你的业务页面,一旦遇到插件缺失,对如何自己补位就有概念了。
6.3 说说生态的实话,以及一个延伸思考
目前 Flutter + 鸿蒙的生态,已经脱离"能不能跑"的阶段,处于"好不好用"的完善期。网上教程越来越多,甚至面试题里也出现了 Flutter 鸿蒙相关的内容,说明这条技术栈已经被市场接受。但如果你问我现在入职一家公司专门做这个方向,我会说它依然是小众方向,生态里的坑还需要早期吃螃蟹的人去填。
有意思的是,Dart 语言本身的生态也不全在 Flutter 上。比如 Serverpod 这类用 Dart 写的后端框架,和 Flutter 前端天然能共享模型代码。如果未来鸿蒙终端上 Flutter 应用普及,那 Dart 在前端、后端的统一也会成为一个小趋势。这个方向未必是主流,但对个人技术护城河的开凿来说,是一个值得留意的增量领域。
一轮测试下来,我对 Flutter 适配鸿蒙的结论用一句话概括:它已经从"实验品"变成了"工程选项"。相比半年前,现在有更清晰的构建路径、更完整的教程资料和更多可用的插件,但距离"团队闭眼放心迁"还有一点时间差。对那些已经在 Flutter 里有存量业务、又想赶上鸿蒙这波红利的团队来说,现在入场做技术预研,时机刚刚好;对那些指望 Flutter 一条路走到底、完全不管原生鸿蒙知识的开发者,我劝你还是先把 ArkTS 基础补上,不然排错效率会让你怀疑人生。
