Freadhub 适配原生鸿蒙(Harmony OS NEXT)

相关文章一:用Flutter给Readhub写一个App

相关文章二:Flutter版本Readhub开源

相关文章三:Flutter iOS真机调试及打包过程记录

相关文章四:Flutter iOS打包过程及构建上线审核通过流程总结

相关文章五:Freadhub终于升级Flutter2.0了

相关文章六:Freadhub Mac版它来了

相关文章七:Freadhub 适配原生鸿蒙(Harmony OS NEXT)

前言

Freadhub是由AriesHoo开发维护的一个Flutter开源项目--readhub的非官方产品。

之前Freadhub 手机端已有Androd、iOS版本,随着 原生鸿蒙(Harmony OS NEXT) 的发布,加上社区 SDK 鸿蒙化的推进。笔者感觉是时候适配一下了.

Gitee开源: gitee.com/AriesHoo/fl...

先来个整体效果展示

亮色模式 深色模式
今日古诗 分享面板
图片分享 文字分享
内置浏览 系统浏览
更多内容 主题选择

开始适配

前置条件

首先因为 Harmony版Flutter SDK 只支持Mac arm架构,故需要准备一个 Mac M系列 的 Mac 电脑.

社区文档

很可惜笔者的电脑是不支持的...😂

话说公司应该给升个级了.

那么就走另一条路了,买个支持原生鸿蒙的手机.

根据自己的情况搞一个 Harmony NEXT 支持设备查询

Flutter SDK下载

目前社区版 鸿蒙Flutter SDK 有俩版本 3.7.12 和 3.22.0, Freadhub选择3.7.12,

可以直接下载给自己的Flutter项目加载使用

git clone gitee.com/openharmony... hm3.7.12

也可使用fvm 进行多版本SDK管理 通过 fvm use hm3.7.12 切换当前系统使用SDK版本

增加ohos支持

flutter create --platforms=ohos . 执行该命令后会在原项目增加 ohos 文件夹

ohos项目配置

下载并配置 DevEco Studio

在华为官网下载一个 DevEco Studio

该步骤非本文重点,具体 安装配置流程参考文章

DevEco Studio 配置 Freadhub ohos项目

第一步:导入 flutter_readhub 项目的 ohos 文件夹,该文件夹是一个完整的 Harmony NEXT项目

如图可见,该项目是完全可直接运行的,类似用Android Studio直接打开android文件夹,也是可以直接运行起来的一样

第二步:配置项目自动签名

因为项目是需要直接运行到真机的,故需要自动签名

需要登录自己的华为开发者账号

打开设备开发者模式并连接电脑

如果电脑未连接设备会是这个样子的

华为官方文档 Flutter社区文档

然后在未配置自动签名项目运行会出现一下问题华为官方解疑

第三步:配置应用bundleName

应用包名,对应 Android 项目的packageName或 applicationId 及 iOS 项目的 bundleId

因为历史原因建议与Android项目作区分

第四步:配置应用的图标及应用名称

配置app.json5

移除 module.json5 中默认添加的 icon 和label

至于原因参考华为官网介绍

v5前 华为官方文档

v5后 华为官方文档

第五步:配置应用的闪屏页

如下图所示配置 module.json5 中 startWindowIcon

增加闪屏背景dark模式适配,copy一份 base 文件夹改名为dark 并且仅保留 element文件夹及下级color.json文件

修改 dark 文件夹下 color.json 文件里的 start_window_background 的 value 为一个相对较暗的值

至此 DevEco Studio 配置 Freadhub ohos项目完成.

flutter_readhub项目适配

插件适配 ohos 端

首先 通过 Android Studio 打开 flutter_readhub 项目,其中 Flutter Plugins 需要自行判断是否需要在 ohos 端进行适配.

可以在Flutter社区已兼容openharmony插件 进行查阅

本项目需要兼容的插件如下

yaml 复制代码
  #  设备信息
  device_info_plus:
    git:
      url: https://gitee.com/openharmony-sig/flutter_plus_plugins.git
      path: packages/device_info_plus/device_info_plus
  #  应用包信息
  package_info_plus:
    git:
      url: https://gitee.com/openharmony-sig/flutter_plus_plugins.git
      path: packages/package_info_plus/package_info_plus
  # WebView-应用内查看资讯详情
  webview_flutter:
    git:
      url: https://gitee.com/openharmony-sig/flutter_packages.git
      path: packages/webview_flutter/webview_flutter
      ref: master
  #跳转系统浏览器/打电话等
  url_launcher:
    git:
      url: https://gitee.com/openharmony-sig/flutter_packages.git
      path: packages/url_launcher/url_launcher
  #动态权限申请-8.0.0版本需在Profile申请需要启用的权限
  permission_handler:
    git:
      url: https://gitee.com/openharmony-sig/flutter_permission_handler.git
      path: permission_handler
  #分享文字及文件-注意保存文件位置
  share:
    git:
      url: https://gitee.com/AriesHoo/plugins.git
      path: packages/share
      ref: master
  #  plus版本
  share_plus:
    git:
      url: https://gitee.com/openharmony-sig/flutter_plus_plugins.git
      path: packages/share_plus/share_plus

其中项目直接引入共计7个需要适配ohos的插件.

又因为 flustars 插件内部引入了 path_provider 和 shared_preferences 插件故需要通过 dependency_overrides 方式进行覆盖.

最后通过命令 flutter pub get 一下,即可查看到对应 ohos 实现的 Flutter Plugins

至此该项目是可以直接运行到 Harmony NEXT 设备上的.最后还需针对ohos的小优化--涉及修改 flutter_readhub 代码层面的.

针对 ohos 的 flutter_readhub 代码层面优化

分享功能优化

因为之前在 Android 平台增加固定分享某些社交平台如QQ、微信、企业微信、钉钉等,故之前魔改了 Flutter 官方的share 插件,但是支持 ohos 的分享插件是 share_plus 故需要做判断.

首先增加是否是 ohos 的判断方法

其次在share_util中的shareText及 shareFiles 方法修改

然后分享图片截取图片到手机功能,经测试发现在ohos上不需要申请权限即可保存到手机然后进行图片分享.但是没有找到图片在图库的具体位置😓.(不知道是否是存在应用独有的存储空间?),故在权限帮助类增加如下判断

下拉刷新及底部加载更多

因之前做 Android 是 MaterialClassicHeader 刷新头,其他都是 ClassicHeader,这次升级后,Androud的刷新头是 MaterialClassicHeader ,ohos 刷新头脚都是 ArkUI 自带的 LoadingProgress效果. 剩余平台的头脚都是 CupertinoActivityIndicator

这里通过加载 GIF图片效果增加 ohos 的效果,首先从华为官网获取到对应gif资源并放入flutter_readhub项目

在flutter_readhub项目中引入插件flutter_svg

然后组装一个组件加载即可

最后刷新头脚相关平台判断即可

最终平台效果一览

Android iOS OHOS

整体圆角弧度增大

最近俩月使用原生鸿蒙手机,感觉系统的圆角做得比较大,感觉挺不错,故将整个flutter_readhub项目涉及到圆角地方进行了增大.

列表旧版 列表新版
分享弹框旧版 分享弹框新版
更多弹框旧版 更多弹框新版

其他小优化

  1. 列表卡片增加已读灰度标识
  2. 顶部诗歌部分增加点击切换功能
  3. 开源移除GitHub地址(主要是太久没有上去加上手机格式化问题二次校验不通过登不上去了😂)
  4. 分享弹框icon增加为5列显得更加合适不过大
  5. 部分图标变更为outlined模式的
  6. 列表回到顶部功能icon变更并且移除文字显示
  7. 接口数据源变更

手机上运行项目

在完成 ohos 端插件适配后即可在手机上运行查看效果

首先 打开开发者选项并开启USB调试, 注意开发者选项需要重启手机.连续点击三次关于本机中软件版本后根据提示操作并重启手机.然后设置>系统>开发者选项 打开USB调试即可.

打开开发者选项 打开USB调试

其次数据线连接电脑与手机选择手机点击运行即可

成功运行,控制台出现flutter_readhub日志

其他操作如 command+s 会 hot reload 和运行其它端一样一样的.

如果要平常使用则通过flutter run --release 这样闪屏页和主程序之间不会有近1s的白屏

debug模式 release模式

其它杂谈

1、部分网页不知道是自身适配原因还是ohos系统本身webview问题.未加载成手机模式而是PC模式,同一网页在Android 环境下是正常的手机模式

HarmonyNEXT Android

2、因 Harmony NEXT 软件生态还在搭建部分应用未迁移的可以通过卓易通下载Android 版进行过度,故可以在 Harmony NEXT手机上同时安装 ohos版 和 Android版

如图所示左侧列表卡片占据到底部小横条的是 ohos版 右侧 最底部有白色预留小横条的是 Android版

总结

  1. 社区 Flutter SDK 提供了开发Harmony NEXT 的一种可能
  2. 支持的版本只有俩 3.7.12 及 3.22.0 目前 Flutter 官方最新版 3.29.2
  3. 三方SDKohos支持度还不够
  4. UI 部分要是有一套ohos的就更好了
  5. 到2025年虽然网上有Flutter团队要解散了,Flutter社区分叉Flock等传闻,但是笔者私以为 Flutter仍是跨平台的最优解,没有之一

该项目为笔者学习Flutter练手开发的,年前心血来潮适配了一下ohos ,权当抛砖引玉了,万望各位不吝赐教

相关推荐
m0_7381858211 小时前
Flutter 鸿蒙化实战:rive 适配 OpenHarmony,Rive 动画
flutter·华为·harmonyos·鸿蒙
zd20057211 小时前
我给x86版本开源鸿蒙系统装上了 Homebrew,还塞了整个 Node 和 opencode 进去
华为·开源·harmonyos
安卓机器11 小时前
rom定制系列------小米8 安卓16线刷原生固件 体验新版本
android·小米8安卓16
song50111 小时前
React Native for OpenHarmony 实战:三方库 react-native-popup-menu 的鸿蒙化适配指南
css·深度学习·react native·react.js·transformer·harmonyos
cyy29811 小时前
小米电视安装tts引擎
android·tv
小锋学长生活大爆炸12 小时前
【工具】在 Android 手机上运行 Docker
android·docker·智能手机
打工仔折腾 AI12 小时前
鸿蒙版ToDesk远控实测:蓝牙键鼠、双模式鼠标与跨端剪贴板怎么用
后端·python·华为·性能优化·计算机外设·harmonyos·ai agent 实战
Carson带你学Android12 小时前
OpenAI Dots 登陆手机端:手机上派任务,AI 在云端写代码
android·ios
事圆则缓12 小时前
Android 依赖注入库到底应该怎么选
android
特立独行的猫a12 小时前
仓颉语言实现强大的Modbus调试工具Modbus Poll:cj-tauri项目介绍与实战
harmonyos·tauri·modbus·仓颉·modbus poll