鸿蒙Flutter开发故事:不,你不需要鸿蒙化

在华为牵头下,Flutter 鸿蒙化如火如荼进行,当第一次看到一份上百个插件的Excel 列表时,我也感到震惊,排名前 100 的插件赫然在列,这无疑是一次大规模的军团作战。

然后,参战团队鱼龙混杂,难免有人要浑水摸鱼。

某天,一名小伙伴发来一条消息,上来就发来几行代码

bash 复制代码
dependency_overrides:
 get:
    git:
      url: "https://gitcode.com/openharmony-sig/fluttertpc_get.git"

引入以后,出现了以下错误:

bash 复制代码
../../../pub-cache/git/fluttertpc_get-fcb370a5094adf8f93261bbad5691de233ec6276/lib/get_navigation/src/extension_navigation.dart:222:62: Error: The getter 'backgroundColor' isn't defined for the class 'ThemeData'.

'ThemeData' is from 'package:flutter/src/material/theme_data.dart' ('../../../versions/versions/custom_3.22.0-ohos/packages/flutter/lib/src/material/theme_data.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'backgroundColor'.
TextStyle(color: confirmTextColor ?? theme.backgroundColor),
^^^^^^^^^^^^^^^
Target kernel_snapshot failed: Exception

看到错误信息,询问之后,确认对方使用的是 Flutter 版本为 3.21,由此可以得出结论,版本不匹配。

同时,让我感到疑惑的是,getx 不是纯 dart 库吗,这也要鸿蒙化?吓得我赶紧打开仓库源码,查看目录和依赖,并没有发现 ohos 相关的平台实现,这让我更迷惑了。于是,我点击提交日志,挨个查看最近的每条记录,查看代码变更,这一看可不得了,我乐了。

简单探究之后,我回复对方,直接用官方社区的插件和版本,没过几分钟,问题得到解决。

第二天,百无聊赖之际,我又想起这个仓库,很好奇到底发生了什么,于是我再次打开仓库,仔细研究一番。

先看变更文件类型,只有几个 markdown 文件,查看其中一个 README 的介绍

"本方案采用插件化的适配器模式实现get库鸿蒙化版本的兼容。",既然是插件化实现,必然要有鸿蒙原生代码,我们知道,Flutter 如果要实现插件化,就需要有平台实现,那么就应该有类似 ohos 的目录工程,类似于下面这样的目录结构:

这是一个标准的 Flutter 插件,webview_flutter 为抽象层,相当于抽象接口(Interface),我们的调用就发生在这里,至于 webview_flutter_ohos, webview_flutter_web 则是每个平台的具体实现(Implement),在 webview_flutter 的 pubspec 文件中,定义了每个平台的实现

yaml 复制代码
flutter:
  plugin:
    platforms:
      android:
        default_package: webview_flutter_android
      ios:
        default_package: webview_flutter_wkwebview
      ohos:
        default_package: webview_flutter_ohos

同时将各个平台的实现 package 依赖进来,这种方式通过拆分不同平台实现了解耦。

当然,插件还可以有另外一种实现形式,也就是早期的耦合式结构,将所有的平台实现放在一个 package 里面,类似于这样:

这种结构也有自身的优点,适用于私有项目,方便统一管理,减少项目结构复杂度。

然而,对于现在这个 get 仓库,啥也没有。

还有一个困扰开发者的问题,如何判断一个插件是否需要鸿蒙化,这里可以从几个方面判断:

1.纯 dart 代码自然跨平台,也就不需要单独适配,这是因为 dart vm 已经适配了鸿蒙(基于鸿蒙社区的 Flutter SDK)

2.依赖于原生平台实现的插件需要鸿蒙化,这里的原生平台指的是 ios/android/ohos 等,可以查看插件的代码仓,查看是否有 ohos 目录或 xxx_ohos 的平台包

3.插件本身为纯 dart 实现,但其依赖的插件有可能需要鸿蒙化,这就需要对其依赖的其他插件逐个排查

总结一下都干了啥,一行核心代码没改,改了些无关痛痒的 markdown,版本信息,example 里面增加了鸿蒙的入口,可有可无,这么一通操作,不仅没有实际贡献,还给开发者造成了困扰,不了解的还以为适配鸿蒙平台需要使用这个版本呢,引入以后还容易出错,最终,鸿蒙化了个寂寞。

相关推荐
OH_TPC9 小时前
HarmonyOS APP开发---“动效君“UI动效素材库App,需要用到这个库
ui·华为·harmonyos·鸿蒙
贾伟康13 小时前
HarmonyOS 3DGS 滤镜切换实战:效果创建、参数管理与资源释放
harmonyos·arkts·鸿蒙开发·技术实践·空间化体验
HarmonyOS_SDK14 小时前
【HarmonyOS API 26】分布式数字身份DID:系统级可信身份体系
harmonyos
贾伟康14 小时前
HarmonyOS GSNode 场景控制实战:位置、缩放、可见性与状态同步
harmonyos·arkts·鸿蒙开发·技术实践·空间化体验
恋猫de小郭14 小时前
感人,Flutter 居然有了一个超实用提案,期待落地
android·前端·flutter
redtank200015 小时前
纯血鸿蒙本地音乐播放器开发实战:我爱听歌架构解析
harmonyos
贾伟康15 小时前
HarmonyOS API 26 分块 3DGS 实战:相机驱动、瓦片回调与并发去重
性能优化·harmonyos·arkts·3dgs·spatial recon kit
万物智能信息科技15 小时前
指纹识别传感器驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·华为·开源·harmonyos·鸿蒙
贾伟康1 天前
【共创稿事节】HarmonyOS 7.0 AOT编译优化:从接入到生产验证
harmonyos·arkts·路由·navigation·navdestination
好的佩奇1 天前
Dart 之增强枚举
android·flutter·dart