相关文章四:Flutter iOS打包过程及构建上线审核通过流程总结
相关文章七: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
文件夹,也是可以直接运行起来的一样
第二步:配置项目自动签名
因为项目是需要直接运行到真机的,故需要自动签名
需要登录自己的华为开发者账号
打开设备开发者模式并连接电脑
如果电脑未连接设备会是这个样子的
然后在未配置自动签名项目运行会出现一下问题华为官方解疑
第三步:配置应用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
项目涉及到圆角地方进行了增大.
列表旧版 | 列表新版 |
---|---|
分享弹框旧版 | 分享弹框新版 |
更多弹框旧版 | 更多弹框新版 |
其他小优化
- 列表卡片增加已读灰度标识
- 顶部诗歌部分增加点击切换功能
- 开源移除GitHub地址(主要是太久没有上去加上手机格式化问题二次校验不通过登不上去了😂)
- 分享弹框icon增加为5列显得更加合适不过大
- 部分图标变更为
outlined
模式的 - 列表回到顶部功能icon变更并且移除文字显示
- 接口数据源变更
手机上运行项目
在完成 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版
总结
- 社区
Flutter SDK
提供了开发Harmony NEXT
的一种可能 - 支持的版本只有俩
3.7.12
及3.22.0
目前 Flutter 官方最新版3.29.2
- 三方SDK
ohos
支持度还不够 - UI 部分要是有一套
ohos
的就更好了 - 到2025年虽然网上有
Flutter团队要解散了
,Flutter社区分叉Flock
等传闻,但是笔者私以为 Flutter仍是跨平台的最优解,没有之一
该项目为笔者学习
Flutter
练手开发的,年前心血来潮适配了一下ohos
,权当抛砖引玉了,万望各位不吝赐教
@AriesHoo 2025.03.20 未允禁转
掘金主页
: AriesHooGitee
: AriesHooEmail
: [email protected]