鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。

引言


在之前的文章鸿蒙Flutter实战:09-现有Flutter项目支持鸿蒙中,介绍了如何改造项目,适配鸿蒙平台。


文中讲述了整体的理念和思路,本文更进一步,结合可实操的项目代码,详细说明如何实施。


通过模块化、鸿蒙壳工程,结合 FVM 管理多版本 Flutter SDK,最终,保持原 Flutter 代码纯净,最小化修改,完成了鸿蒙化的适配示例。


本项目代码地址: https://gitee.com/zacks/flutter-ohos-demo


准备工作


1.安装 FVM


dart pub global activate melos
AI 代码解读

2.使用 FVM 安装 Flutter SDK


分别安装官方的3.22版本,以及鸿蒙社区的 3.22.0 版本


3.搭建 Flutter鸿蒙开发环境


参考文章《鸿蒙Flutter实战:01-搭建开发环境》


搭建项目架构


创建目录


# 创建项目目录mkdir flutter-ohos-demo
AI 代码解读


设置使用的 Flutter SDK 版本
推荐在 VsCode 的命令行中执行以下命令,这将创建 .fvm 目录, .vscode/setting.json 文件, 和.fvmrc 文件



fvm use 3.22.0
AI 代码解读

初始化工作区间


创建目录,项目结构如下所示:


.├──  packages│   ├── apps  #该目录用于存放各端应用壳工程│   ├── common #该目录用于存放公共库,均为纯 dart 代码,不依赖于 ios/android 等原生实现│   │   ├── domains #领域对象,存放各类实体文件,如枚举/模型/vo/事件等│   │   ├── extensions #存放扩展类文件,对于类的扩展方法/属性│   │   ├── services #服务类:如请求服务/授权服务/缓存服务/平台调用服务/路由服务/工具类等│   │   └── widgets #通用小型 widgets, 纯dart编写的 Flutter UI 组件│   ├── components #封装组件库,可以依赖于第三方库/第三方插件,或依赖于 plugins中的插件│   │   ├── image_uploader│   │   └── player│   ├── modules│   │   ├── address│   │   ├── home│   │   ├── me│   │   ├── message│   │   ├── order│   │   ├── shop│   │   └── support│   └── plugins #插件库,自行封装的插件库,依赖于原生平台(ios/android)的代码│       └── printer├── README.md├── melos.yaml└── pubspec.yaml
AI 代码解读

运行 melos bootstrap


melos bootstrap
AI 代码解读

开始编写代码


在各个 package 初始化代码,如在 packages/common/domains 目录运行


fvm flutter create --template package .
AI 代码解读

创建壳工程


新建两个壳工程,一个为 app,另外一个为 ohos_app


App 壳工程


进入 package/apps/app 目录, 创建 app 项目,该项目为一个 App 项目,用于各平台(ios/android/mac 等, 不包含鸿蒙)打包


fvm flutter create --template app --org com.moguyun.flutter app
AI 代码解读

增加依赖项


修改 pubspec.yaml,添加以下内容


 services:   path'../../common/services' domains:   path:  '../../common/domains' widgets:   path'../../common/widgets' home:   path'../../modules/home' me:   path'../../modules/me' support:   path'../../modules/support'
AI 代码解读

安装依赖


运行以下命令,安装依赖


fvm flutter pub get
AI 代码解读

鸿蒙壳工程


切换鸿蒙 Flutter SDK


首先在 flutter-ohos-demo 项目根目录,将 Flutter 版本切换到鸿蒙化的版本


fvm use custom_3.22.0
AI 代码解读


SDK 变更以后,需要重启 IDE (或者 Dart:Restart Analysis Server),以便让 Flutter 插件重启



创建 ohos_app 项目


进入 packages/apps 目录,创建 ohos_app 项目


fvm flutter create --template app --platforms ohos --org com.moguyun.flutter ohos_app
AI 代码解读

增加依赖项


进入 packages/apps/ohos_app 目录中的 pubspec.yaml, 同样增加依赖项


 services:   path'../../common/services' domains:   path:  '../../common/domains' widgets:   path'../../common/widgets' home:   path'../../modules/home' me:   path'../../modules/me' support:   path'../../modules/support'
AI 代码解读

三方库鸿蒙化适配


编辑 pubspec.yaml文件,增加以下配置,通过 dependency_overrides 来替换鸿蒙化的三方库,注意鸿蒙化的库与原库,保持版本统一


# 鸿蒙适配dependency_overrides:  flutter_inappwebview:    git:      url: https://gitee.com/openharmony-sig/flutter_inappwebview.git      path: "flutter_inappwebview"
AI 代码解读


每次修改完 pubspec.yaml,使用 fvm flutter pub get 更新下依赖安装。



运行调试


用 Deveco 打开apps/ohos_app/ohos 目录。


在 Deveco 左上角 打开 File -> Project Structure..., 点击 Siging Configs, 勾选 Automatically generate signature, 对鸿蒙项目签名。


在 ohos_app 目录下,使用 fvm flutter run,或者点击运行按钮,运行flutter项目。


注意事项



  1. melos.yaml 文件中的 sdkPath: .fvm/flutter_sdk 配置了 melos 使用的 flutter SDK 版本,即由FVM 配置的当前项目版本


  2. 每次切换 Flutter SDK 时,都会修改文件 .fvm/, vscode/settings.json 文件


  3. ohos_app/pubsec.yaml 中的 dependency_overrides, 仅添加需要鸿蒙化的三方库


  4. ohos-3.22 在 build 时,有的 har 包可能确实,建议保持 ohos-Flutter 版本最新,如果还是不行,可以考虑手动复制 har 包(使用 3.7 构建出来)



如何判断三方库是否需要鸿蒙化,简而言之,如果三方库由纯 Dart 实现,则不需要单独适配,直接使用;如果三方库依赖系统底层实现,则需要鸿蒙化适配。


三方库的适配情况,可以查询 Gitee/Github,或者查阅表格 Flutter三方库适配计划



  1. 已知插件删除问题,如果删除插件,可能需要在ohos里面手动修改代码,移除相关依赖

ohos/oh-package.json5


应用截图


1.jpeg1.jpeg
640.jpeg640.jpeg
640 (1).jpeg640 (1).jpeg

总结



  1. 通过 FVM 管理多个 Flutter SDK 版本,仅在鸿蒙调测打包时,切换到 ohos-flutter SDK
  2. 通过 apps 壳工程,将鸿蒙化适配的代码,尽量在 ohos_app 项目中完成。通过 pub 包管理的 dependency_overrides 配置,逐个替换鸿蒙化的三方库
  3. 通过 melos 管理多包项目,Flutter 项目进行模块化、组件化、插件化拆分,职责分离,平台抽象,不同平台组合打包,有效解决平台不一致问题

参考资料



目录
打赏
0
4
4
1
29
分享
相关文章
HarmonyOS NEXT 实战系列09-生命周期
页面与组件生命周期介绍:页面生命周期(@Entry装饰)包含onPageShow、onPageHide、onBackPress等接口,分别在页面显示、隐藏和返回按钮点击时触发;组件生命周期(@Component装饰)包含aboutToAppear和aboutToDisappear,在组件创建与销毁时回调。示例代码展示了生命周期函数的使用场景及执行时机,帮助开发者更好地管理页面和组件状态。
HarmonyOS NEXT 实战系列09-生命周期
HarmonyOS NEXT 实战系列10-网络通信
本文介绍了网络通信相关知识,包括HTTP协议的工作原理、鸿蒙系统中HTTP模块的使用方法、Promise异步操作处理机制及async/await语法糖的应用,以及JSON数据格式的语法规则与转换方法。重点讲解了HTTP请求响应流程、鸿蒙开发中的网络权限申请与代码实现、Promise三种状态及创建方式,并通过示例说明异步编程技巧和JSON在数据传递中的应用。
38 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
59 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
139 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
HarmonyOS NEXT-Flutter混合开发之鸿蒙-代码实践
本文介绍了在Flutter三端分离模式下,将纯血鸿蒙混入Flutter项目的实践经验。基于咸鱼团队的flutter_boost和自定义FlutterPlugin实现,涵盖环境搭建、Flutter模块创建、flutter_boost集成、鸿蒙侧适配、双端通信及原生调用等内容。详细说明了Flutter与鸿蒙间的页面跳转、数据传递及方法调用的实现方式,为开发者提供参考。总结指出,通过管理页面栈和实现双端交互,可满足常规开发需求。
|
8天前
|
HarmonyOS NEXT 实战系列-综合案例新闻页
本示例展示了如何通过 `ForEach` 遍历数据并结合 HTTP 请求动态渲染新闻列表。首先定义了 `News` 接口描述数据结构,接着在组件中使用 `List` 和 `ForEach` 渲染新闻项,包含标题、来源、评论数、时间和图片等信息。同时,通过 `http.createHttp()` 获取远程数据并更新列表。代码结构清晰,适配动态数据展示需求。
鸿蒙相机开发实战:从设备适配到性能调优 —— 我的 ArkTS 录像功能落地手记(API 15)
本文分享鸿蒙相机开发经验,从环境准备到核心逻辑实现,涵盖权限声明、模块导入、Surface关联与分辨率匹配,再到录制控制及设备适配法则。通过实战案例解析,如旋转补偿、动态帧率调节和编解码优化,帮助开发者掌握功能实现、设备适配与体验设计三大要点,减少开发坑点。适合鸿蒙新手及希望深化硬件交互能力的工程师参考收藏。
30 2
HarmonyOS NEXT 实战系列01-ArkTS基础
ArkTS是HarmonyOS应用开发的首选语言,基于TypeScript扩展而成,保留了TS风格并强化静态检查与分析能力,提升程序稳定性和性能。它支持声明式UI开发、状态管理等功能,简化应用构建。语法涵盖变量、常量、数组、对象、语句(如if、switch)、函数(含箭头函数与泛型)、类和模块等特性,同时提供联合类型、字面量联合类型及枚举类型等丰富类型支持,助力开发者高效编写高质量代码。
HarmonyOS NEXT 实战系列05-案例回关粉丝
本文介绍了一个基于HarmonyOS的组件化设计案例,通过提取 `FansItemComp` 组件实现复用,使用 `@Prop` 动态接收数据渲染UI。示例中包含关注与互关功能:父组件 `TestPage` 提供粉丝列表数据,封装 `getFansAndFollowCount` 方法统计互关人数;子组件通过按钮交互更新关注状态,并利用 `onChange` 回调通知父组件同步数据变化。代码结构清晰,展示了组件间通信及动态渲染的实现方式。
HarmonyOS NEXT 实战系列03-案例粉丝列表
本文通过一个案例展示了使用 Interface 定义对象类型约束、华为资源类型 Resource、数组类型 FansItem[] 的定义,以及通过 ForEach 实现循环渲染和 @Extend 扩展组件属性的方法。代码实现了一个列表界面,包含头像、名称、标题和关注按钮,按钮样式根据是否已关注动态变化。此示例未涉及动态交互,后续文章将补充相关内容。