鸿蒙 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
复制代码
plugins 是依赖于原生平台的插件,
components 是平台无关的组件,
common 里面是领域对象,小组件,服务类,扩展等,平台无关,里面均为纯 Dart 代码。
apps 是应用外套,通过组合不同的模块,向不同的平台打包。
使用 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 查看系统日志。
评论