鸿蒙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 里面增加了鸿蒙的入口,可有可无,这么一通操作,不仅没有实际贡献,还给开发者造成了困扰,不了解的还以为适配鸿蒙平台需要使用这个版本呢,引入以后还容易出错,最终,鸿蒙化了个寂寞。

相关推荐
W蘭11 分钟前
Flutter从入门到实战-01-Dart语言基础
flutter
key_3_feng26 分钟前
鸿蒙6.0电子手表高山攀登指标监测功能开发实战
华为·harmonyos
xuankuxiaoyao29 分钟前
Vue.js 插槽、作用域插槽、商品、阶段案例
android·vue.js·flutter
恋猫de小郭34 分钟前
终于,Flutter 修复 Android 中文字体异常,但是很草台,不知怎么吐槽
android·前端·flutter
nashane36 分钟前
HarmonyOS 6学习:超大分辨率图片压缩与长截图生成优化实践
学习·华为·harmonyos
xmdy586644 分钟前
Flutter + 开源鸿蒙跨端实战|基于空间地理信息的城市全域智慧泊车调度与多维运维管理平台 Day3
flutter·华为·开源
shaodong11231 小时前
HarmonyOS NEXT 打印机开发实战:基于 Print Kit 全面解析
华为·harmonyos
三声三视1 小时前
Electron + 鸿蒙分布式投屏:PC 端一键推送画面到鸿蒙设备全实战
分布式·electron·harmonyos·鸿蒙·桌面
UnicornDev1 小时前
【Flutter x HarmonyOS 6】魔方计时APP——挑战页面的UI设计
flutter·ui·华为·harmonyos·鸿蒙
三声三视1 小时前
鸿蒙 ArkTS 后台任务全攻略:短时任务、长驻任务与延迟任务实战,告别应用被系统杀掉的困境
华为·harmonyos·鸿蒙