HarmonyOS鸿蒙Next中Flutter适配报错

HarmonyOS鸿蒙Next中Flutter适配报错 flutter版本: 3.22.1-ohos-1.0.4

依赖:

image_picker:
  git:
    url: "https://gitcode.com/openharmony-tpc/flutter_packages.git"
    path: "packages/image_picker/image_picker"
    ref: "br_image_picker-v1.1.2_ohos"

flutter代码:

final ImagePicker picker = ImagePicker();
final pickedFile = await picker.pickImage(source: ImageSource.camera);

异常信息:

PlatformException(channel-error, Unable to establish connection on channel: “dev.flutter.pigeon.image_picker_ohos.ImagePickerApi.pickImages”., null, null)


更多关于HarmonyOS鸿蒙Next中Flutter适配报错的实战教程也可以访问 https://www.itying.com/category-92-b0.html

3 回复

此问题已解:

原因是

GeneratedPluginRegistrant没有registerWith

更多关于HarmonyOS鸿蒙Next中Flutter适配报错的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


鸿蒙Next中Flutter适配报错

主要因鸿蒙Next不再兼容Android生态,Flutter引擎依赖的Android NDK和Skia图形库无法直接运行。需使用华为提供的鸿蒙Flutter适配方案,将Flutter代码通过方舟编译器转换为鸿蒙原生应用。当前适配工作需基于OpenHarmony的Flutter鸿蒙版本进行代码迁移和重构。

这个错误表明 image_picker 插件在 HarmonyOS Next 上运行时,其底层的原生通信通道(Pigeon)未能成功建立。

主要原因和解决方案如下:

  1. 插件版本与 Flutter 版本不匹配:你使用的 flutter 3.22.1-ohos-1.0.4 是专门为 OpenHarmony 适配的版本。而 image_picker 插件引用的分支 br_image_picker-v1.1.2_ohos 可能并非为 HarmonyOS Next(即纯血鸿蒙,API 11+)设计,而是为基于 AOSP 的旧版鸿蒙或 OpenHarmony 适配的。这两者的底层架构和 API 已完全不同。

    解决:你需要确认该插件的分支或仓库是否明确声明支持 HarmonyOS Next (API 11)。目前,许多社区移植的插件尚未完成对 Next 的适配。建议:

    • 查阅该 Git 仓库的 Issues 或文档,确认其支持范围。
    • 关注华为官方或社区是否有针对 HarmonyOS Next 的 image_picker 适配版本发布。
  2. 原生侧代码未正确集成或注册:Pigeon 通道需要在 HarmonyOS 原生工程(entry/src/main/ets)中有对应的 ImagePickerOhos 类实现并正确注册。如果插件包中的原生代码(.har 包或源码)未正确引入你的工程,或注册逻辑失败,就会导致此错误。

    解决

    • 确保已按照该插件的 README 或安装说明,将所需的原生依赖(如 .har 文件)正确添加到你的 HarmonyOS 工程的 oh-package.json5 中,并执行 ohpm install
    • 检查插件是否需要在 EntryAbility 等生命周期中初始化。查看插件提供的示例工程或源码。
  3. 权限问题:在 HarmonyOS Next 上使用相机需要动态申请权限。如果权限未授予,原生通道可能无法正常工作。

    解决:确保你的应用已配置并正确申请了 ohos.permission.CAMERA 权限。这需要在 module.json5 中声明,并在调用 pickImage 前使用 @ohos.abilityAccessCtrl 相关 API 进行动态申请。

当前步骤建议: 首先,重点排查第1点。由于 HarmonyOS Next 架构变化巨大,很多社区插件的“ohos”分支可能仅适用于旧版。如果找不到确认支持 Next 的版本,你可能需要暂时寻找替代方案(如使用纯 Dart 实现的图片选择库),或等待官方/社区的正式适配。

回到顶部