写点什么

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

作者:星释
  • 2024-11-06
    浙江
  • 本文字数:2168 字

    阅读完需:约 7 分钟

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

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

背景

原来使用 Flutter 开发的项目,需要适配鸿蒙。

环境搭建

见文章[鸿蒙 Flutter 适配指南],搭建开发环境,使用 fvm 管理多版本 SDK。

模块化

原有项目保持模块化,拆分为 apps/common/components/modules/plugins 等目录,如下所示:


.├── README.md├── analysis_options.yaml├── melos.yaml├── melos_ogw-flutter.iml├── node_modules├── packages│   ├── README.md│   ├── apps│   │   ├── app│   │   ├── dsm_app│   │   ├── ohos_app│   │   └── web│   ├── common│   │   ├── domains│   │   ├── extensions│   │   ├── services│   │   └── widgets│   ├── components│   │   ├── image_uploader│   │   ├── player│   │   └── scroll_banner│   ├── modules│   │   ├── address│   │   ├── community│   │   ├── home│   │   ├── invoice│   │   ├── me│   │   ├── message│   │   ├── order│   │   ├── shop│   │   ├── support│   │   ├── updater│   └── plugins│       ├── image_picker│       ├── printer├── pubspec.lock├── pubspec.yaml└── yarn.lock
复制代码


  1. plugins 是依赖于原生平台的插件,

  2. components 是平台无关的组件,

  3. common 里面是领域对象,小组件,服务类,扩展等,平台无关,里面均为纯 Dart 代码。

  4. apps 是应用外套,通过组合不同的模块,向不同的平台打包。

  5. 使用 melos 管理多包仓库。


其中 apps 下的项目,则为需要打包成各平台,各 app 的入口项目。里面主要为项目配置代码,模块依赖配置,以及特定的平台适配代码。


在 apps 目录下新建鸿蒙项目,先把壳项目在鸿蒙中跑起来,确保没有问题。依次再添加依赖项,首先添加纯 dart 编写的包,再添加依赖于原生代码/插件的包。注意挨个添加依赖,不要一次添加太多依赖,方便排查定位问题,


解决版本依赖问题,鸿蒙 Flutter 项目目前需要依赖于 3.7 版本,如果原项目使用了更低的版本,则可将原项目 SDK 依赖升级至 3.7;如果原项目 SDK 版本高于 3.7,则有两种方案:一种是降级原项目 SDK 依赖为 3.7;另外一种是使用多分支方案。

特定平台工程

在 apps 目录下新建一个项目,该项目运行鸿蒙平台适配和打包。


flutter create --platforms ohos ohos_app
复制代码


目录结构如下所示:


.├── README.md├── analysis_options.yaml├── assets│   ├── icons│   │   ├── 2.0x│   │   ├── 3.0x│   │   └── placeholder.png│   └── images│       ├── 2.0x│       └── 3.0x├── build│   ├── ...├── env├── lib│   ├── config│   │   ├── easy_refresh.dart│   │   ├── routes.dart│   │   └── theme.dart│   └── main.dart├── ohos│   ├── AppScope│   │   ├── app.json5│   │   └── resources│   ├── build-profile.json5│   ├── entry│   │   ├── build│   │   ├── build-profile.json5│   │   ├── hvigorfile.ts│   │   ├── oh-package-lock.json5│   │   ├── oh-package.json5│   │   ├── oh_modules│   │   └── src│   ├── har│   │   ├── ...│   ├── hvigor│   │   └── hvigor-config.json5│   ├── hvigorfile.ts│   ├── local.properties│   ├── oh-package-lock.json5│   ├── oh-package.json5│   └── oh_modules│       └── ...├── pubspec.lock└── pubspec.yaml
复制代码


可以看到,该项目只是一个壳工程,没有太多代码,主要为项目的一些特定配置,如主题、路由等,以及 App 入口初始化配置。


编辑 pubspec.yaml 文件,添加组件和模块依赖。


environment:  sdk: '>=2.19.6 <3.0.0'dependencies:  flutter:    sdk: flutter  flutter_localizations:    sdk: flutter  # 下拉刷新  easy_refresh: ^3.0.4+2  flutter_dotenv: ^5.1.0  go_router: ^6.0.0
# 领域对象 domains: path: '../../common/domains' services: path: '../../common/services' widgets: path: '../../common/widgets' address: path: '../../modules/address' support: path: '../../modules/support' me: path: '../../modules/me' message: path: '../../modules/message' order: path: '../../modules/order' shop: path: '../../modules/shop' home: path: '../../modules/home'
复制代码

配置对特定插件进行鸿蒙化适配

部分第三方插件以及插件依赖的其他库,如果没有适配鸿蒙,则可以通过 override 配置鸿蒙化的版本


dependency_overrides:  # ohos  path_provider:    git:      url: "https://gitee.com/openharmony-sig/flutter_packages.git"      path: "packages/path_provider/path_provider"
复制代码

编译运行

运行 Flutter 项目,查看相关日志和运行界面,针对出现的问题再单独处理。


查看日志,可以在运行 Flutter 处的 IDE 调试控制台查看 Flutter 项目日志,可以使用 hdc hilog 命令或 DevEco 查看系统日志。

发布于: 刚刚阅读数: 3
用户头像

星释

关注

还未添加个人签名 2020-12-05 加入

还未添加个人简介

评论

发布
暂无评论
鸿蒙Flutter实战:09-现有Flutter项目支持鸿蒙_flutter_星释_InfoQ写作社区