鸿蒙Flutter实战:25-混合开发详解-5-跳转Flutter页面

鸿蒙 Flutter 实战:25-初始化 Flutter 引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

前言

将 Flutter 模块添加至宿主鸿蒙项目中后,接下来需要实现页面跳转、消息通信等功能。本文重点介绍如何初始化 Flutter 引擎,这是鸿蒙 Flutter 混合开发的基础步骤。

初始化 Flutter 引擎

Flutter 引擎初始化流程示意图

一、项目配置

1.1 添加依赖

编辑 ohos_app/oh-package.json 文件,根据集成方式不同,配置也有所不同。

1.2 Har 包方式

如果通过 Har 包方式引入 Flutter 模块,则需要添加如下内容:

{
  "dependencies": {
    "@ohos/flutter_module": "file:har/my_flutter_module.har",
    "@ohos/flutter_ohos": "file:har/my_flutter.har"
  },
  "overrides": {
    "@ohos/flutter_ohos": "file:har/flutter.har"
  }
}

1.3 源码方式

如果通过源码方式引入 Flutter 模块,则需要添加如下内容:

{
  "dependencies": {
    "@ohos/flutter_module": "./flutter_module",
    "@ohos/flutter_ohos": "./har/flutter.har"
  }
}

1.4 配置说明

依赖包说明
@ohos/flutter_moduleFlutter 模块,包含 Dart 代码编译产物
@ohos/flutter_ohosFlutter 引擎核心库
overrides覆盖默认依赖,确保版本一致

二、Flutter 引擎初始化

2.1 修改 EntryAbility

编辑 ohos_app/entry/src/main/ets/entryability/EntryAbility.ets 文件。

2.2 修改前(原生鸿蒙应用)

import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';

const DOMAIN = 0x0000;

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
  }

  onDestroy(): void {
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
        return;
      }
      hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
    });
  }

  onWindowStageDestroy(): void {
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
  }
}

2.3 修改后(Flutter 混合应用)

import { FlutterAbility, FlutterEngine } from '@ohos/flutter_ohos';
import { GeneratedPluginRegistrant } from '@ohos/flutter_module';

export default class EntryAbility extends FlutterAbility {
  configureFlutterEngine(flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine)
    GeneratedPluginRegistrant.registerWith(flutterEngine);
  }
}

2.4 核心变化

变化项修改前修改后
继承类UIAbilityFlutterAbility
导入模块AbilityKitflutter_ohos
生命周期手动管理自动继承
插件注册GeneratedPluginRegistrant

三、FlutterAbility 解析

3.1 继承关系

UIAbility (鸿蒙原生 Ability 基类)
    │
    └─► FlutterAbility (Flutter 提供的扩展类)
            │
            └─► EntryAbility (你的应用 Ability)

EntryAbility 继承自 FlutterAbility,而 FlutterAbility 继承自 UIAbility

3.2 FlutterAbility 新增功能

FlutterAbility 在 UIAbility 基础上增加了以下功能:

1. 引擎管理
功能说明
初始化 Flutter 引擎创建 FlutterEngine 实例
绑定 DelegateFlutter 与原生能力绑定
窗口生命周期管理管理 create/destroy 事件
2. UI 交互
功能说明
创建 FlutterView提供视图容器
系统配置处理深色模式/字体缩放
多语言适配国际化支持
无障碍服务辅助功能适配
3. 生命周期协调
功能说明
onForeground转发前台事件到 Flutter
onBackground转发后台事件到 Flutter
异常恢复处理应用重启恢复
4. 扩展支持
功能说明
addPlugin插件管理接口
onConfigurationUpdate热重载配置同步

3.3 生命周期对比

原生 UIAbilityFlutterAbility说明
onCreate-应用创建(已废弃)
-configureFlutterEngine配置 Flutter 引擎
onWindowStageCreate-窗口创建(自动处理)
onForegroundonForeground进入前台
onBackgroundonBackground进入后台
onDestroy-销毁(自动处理)

四、插件注册

4.1 GeneratedPluginRegistrant

GeneratedPluginRegistrant.registerWith(flutterEngine) 会自动注册所有已安装的 Flutter 插件。

4.2 生成机制

当你运行 flutter pub get 时,Flutter 工具会自动生成 GeneratedPluginRegistrant 文件。

4.3 手动添加插件

如果需要手动添加插件,可以使用 addPlugin 方法:

export default class EntryAbility extends FlutterAbility {
  configureFlutterEngine(flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine)
    GeneratedPluginRegistrant.registerWith(flutterEngine);

    // 手动添加自定义插件
    this.addPlugin(new CustomPlugin());
  }
}

五、完整文件结构

5.1 项目结构

ohos_app/
├── ohos/
│   ├── entry/
│   │   └── src/main/ets/entryability/
│   │       └── EntryAbility.ets  ← 入口文件
│   └── oh-package.json          ← 依赖配置
├── flutter_module/
│   └── ...                       ← Flutter 模块
└── har/
    └── flutter.har              ← Flutter 引擎库

5.2 依赖关系

┌─────────────────────────────────────────────────────────────┐
│                    依赖关系图                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   EntryAbility.ets                                          │
│         │                                                   │
│         │ 继承                                                │
│         ▼                                                   │
│   FlutterAbility                                            │
│         │                                                   │
│         │ 使用                                                │
│         ▼                                                   │
│   FlutterEngine                                             │
│         │                                                   │
│         │ 注册                                                │
│         ▼                                                   │
│   GeneratedPluginRegistrant                                 │
│         │                                                   │
│         │ 包含                                                │
│         ▼                                                   │
│   所有 Flutter 插件                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

六、验证初始化

6.1 运行应用

# 进入项目目录
cd ohos_app

# 运行应用
flutter run -d <device_id>

6.2 查看日志

# 查看 Flutter 引擎日志
hdc hilog | grep flutter

# 查看应用日志
hdc hilog | grep "EntryAbility"

6.3 成功标志

标志说明
无崩溃引擎初始化成功
Flutter 日志输出引擎正常运行
DevTools 可连接调试端口已开启

七、常见问题

7.1 编译错误

错误解决方案
找不到 flutter_ohos检查 oh-package.json 配置
GeneratedPluginRegistrant 不存在运行 flutter pub get
继承错误确认 extends FlutterAbility

7.2 运行错误

错误解决方案
应用闪退检查依赖是否完整
白屏检查 Flutter 入口配置
插件不生效确认插件已注册

总结

本文介绍了在鸿蒙项目中初始化 Flutter 引擎的完整流程:

  1. 配置依赖 - 在 oh-package.json 中添加 Flutter 依赖
  2. 修改 EntryAbility - 继承 FlutterAbility 而非 UIAbility
  3. 配置引擎 - 在 configureFlutterEngine 中注册插件
  4. 验证运行 - 运行应用并查看日志

提示:FlutterAbility 已经处理了大部分生命周期管理,开发者只需要关注 configureFlutterEngine 配置即可。

下一篇预告:[调试指南](https://gitee.com/zacks/awesome-harmonyos-flutter/blob/master/鸿蒙 Flutter 实战:08-调试指南.md)

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少湖说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值