DEV Community

Cover image for HarmonyOS Flutter Practice: 09-Existing Flutter Projects Support Harmony
shaohushuo
shaohushuo

Posted on

HarmonyOS Flutter Practice: 09-Existing Flutter Projects Support Harmony

Background

Projects originally developed with Flutter need to be adapted to Harmony.

Environment Construction

See the article [Harmony Flutter Adaptation Guide] to build a development environment and use fvm to manage multiple versions of SDK.

Modularization

The original project remains modularized and is split into directories such as apps/common/components/modules/plugins, as shown below:

.
├── 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
Enter fullscreen mode Exit fullscreen mode
  1. plugins are plugins that depend on the native platform,

  2. components are platform-independent components,

  3. common It contains domain objects, widgets, service classes, extensions, etc., which are platform-independent and all pure Dart code.

  4. apps is the application shell, which is packaged for different platforms by combining different modules.

  5. Use melos to manage multi-package repositories.

The projects under apps are the entry projects that need to be packaged into various platforms and apps. It mainly contains project configuration code, module dependency configuration, and specific platform adaptation code.

Create a new Harmony project in the apps directory, run the shell project in Harmony first, and make sure there are no problems. Add dependencies one by one, first add packages written in pure dart, and then add packages that depend on native code/plugins. Pay attention to adding dependencies one by one, and do not add too many dependencies at a time, so as to facilitate troubleshooting and locating problems.

To solve the version dependency problem, the Harmony Flutter project currently needs to rely on version 3.7. If the original project uses a lower version, the original project SDK dependency can be upgraded to 3.7; if the original project SDK version is higher than 3.7, there are two solutions: one is to downgrade the original project SDK dependency to 3.7; the other is to use a multi-branch solution.

If you need to use Flutter version 3.22, see the article Harmony Flutter Practice: 11-Use Flutter SDK 3.22.0

Specific platform project

Create a new project in the apps directory, which runs the Harmony platform adaptation and packaging.

flutter create --platforms ohos ohos_app
Enter fullscreen mode Exit fullscreen mode

The directory structure is as follows:

.
├── 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
Enter fullscreen mode Exit fullscreen mode

As you can see, this project is just a shell project without much code. It mainly contains some specific configurations of the project, such as themes, routes, etc., as well as App entry initialization configuration.

Edit the pubspec.yaml file and add component and module dependencies.

environment:
sdk: '>=2.19.6 <3.0.0'
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
# Pull down to refresh
easy_refresh: ^3.0.4+2
flutter_dotenv: ^5.1.0
go_router: ^6.0.0

# Domain objects
domains:
path: '../../common/domains'
# Common service class
services:
path: '../../common/services'
# Pure Dart UI components
widgets:
path: '../../common/widgets'
# Module: Delivery address
address:
path: '../../modules/address'
# Module: Help center
support:
path: '../../modules/support'
# Module: Personal Center
me:
path: '../../modules/me'
# Module: Message Notification
message:
path: '../../modules/message'
# Module: Order
order:
path: '../../modules/order'
# Module: Mall
shop:
path: '../../modules/shop'
# Module: Home Page
home:
path: '../../modules/home'
Enter fullscreen mode Exit fullscreen mode

Plugin Harmony Adaptation

For some third-party plugins and other libraries that plugins depend on, if they are not adapted to Harmony, you can configure the Harmony version through override

dependency_overrides:
# ohos
path_provider:
git:
url: "https://gitee.com/openharmony-sig/flutter_packages.git"
path: "packages/path_provider/path_provider"
Enter fullscreen mode Exit fullscreen mode

Compile and run

Run the Flutter project, view the relevant logs and running interface, and deal with the problems separately.

To view the logs, you can view the Flutter project logs in the IDE debug console where Flutter is running, and you can use the hdc hilog command or DevEco to view the system logs.

Top comments (0)