鸿蒙 Flutter 实战:image_crop 0.4.1 适配 3.27-ohos 全流程
摘要
在鸿蒙(OpenHarmony)Flutter 3.27-ohos 生态下,社区已有针对较老 SDK 的 flutter_image_crop 适配。本文记录在 Flutter 3.27.5-ohos-1.0.3 上,将上游 image_crop ^0.4.1 跑通并完成真机验证的过程,涵盖环境、构建、Demo 功能测试与依赖接入。
开源仓库:https://gitcode.com/xiaoyangming/flutter_image_crop_ohos
一、为什么要做这件事?
image_crop 是 Flutter 侧常用的图片裁剪插件,主要能力包括:
| 能力 | 说明 |
|---|---|
Crop 组件 |
提供可交互的裁剪框、缩放与网格 UI |
sampleImage |
按比例采样缩小大图,降低内存占用 |
cropImage |
按选定区域裁剪并输出文件 |
getImageOptions |
读取图片宽高(不解码全图) |
业务里常见场景:用户从相册选图 → 拖动裁剪框 → 导出裁剪结果上传。
鸿蒙 Flutter 使用 ohos 平台实现,不能直接用 pub.dev 上未适配鸿蒙的版本。参考仓基于 3.7-ohos 等版本已有实现,本文目标是在 3.27-ohos 上复用并验证。

二、环境与参考
2.1 开发环境
| 项 | 版本 / 说明 |
|---|---|
| Flutter | 3.27.5-ohos-1.0.3 |
| Dart | 3.6.2 |
| 命令 | flutter(本地若用 FVM,将下文 flutter 改为 fvm flutter 即可) |
| IDE | DevEco Studio(鸿蒙签名、真机调试) |
验证 Flutter 版本:
flutter --version

2.2 参考与发布仓库
| 仓库 | 作用 |
|---|---|
| CPF-Flutter/flutter_image_crop | 已有鸿蒙适配,作实现参考 |
| xiaoyangming/flutter_image_crop_ohos | 本文适配成果对外发布 |
| pub.dev/image_crop | 上游 Dart API(0.4.1) |
三、适配思路(3.27-ohos)
整体不是从零写插件,而是:
- 以社区 flutter_image_crop 为基线(含
ohos/ArkTS 原生图像处理)。 - 对齐上游包版本 0.4.1,放宽 Dart SDK 约束以支持 Dart 3.x。
- 在 3.27.5-ohos-1.0.3 下执行
pub get、analyze、build hap。 - 使用 example 真机验证选图、裁剪 UI 与
cropImage。
工程关键目录:
flutter_image_crop_ohos/
├── lib/ # Dart API(包名仍为 image_crop)
├── ohos/ # 鸿蒙 HAR、ImagecropPlugin 原生实现
├── example/
│ ├── lib/main.dart # 选图 + Crop 演示
│ └── ohos/ # 示例 App,在此配置签名
└── pubspec.yaml
四、接入项目
4.1 添加依赖
在业务工程 pubspec.yaml 中:
dependencies:
image_crop:
git:
url: https://gitcode.com/xiaoyangming/flutter_image_crop_ohos.git
ref: v0.4.1-ohos-3.27
说明:Git 仓库名是
flutter_image_crop_ohos,Dart package 名仍是image_crop,无需改 import。
flutter pub get
4.2 权限说明
example 通过 image_picker 调用系统相册选择器(安全访问相册),用户选图后应用仅获得所选文件 URI,无需声明 ohos.permission.READ_IMAGEVIDEO。
4.3 代码示例
import 'dart:io';
import 'package:image_crop/image_crop.dart';
final cropKey = GlobalKey<CropState>();
// 裁剪 UI
Crop.file(imageFile, key: cropKey, aspectRatio: 4.0 / 3.0);
// 读取图片尺寸
final options = await ImageCrop.getImageOptions(file: imageFile);
// 采样缩小
final sampled = await ImageCrop.sampleImage(
file: imageFile,
preferredWidth: 1024,
preferredHeight: 1024,
);
// 执行裁剪
final crop = cropKey.currentState;
if (crop?.area != null) {
final cropped = await ImageCrop.cropImage(
file: sampled,
area: crop!.area!,
scale: crop.scale,
);
}
五、构建与签名
5.1 编译 HAP
cd example
flutter pub get
flutter build hap --debug
成功时可看到类似输出:
✓ Built ohos/entry/build/default/outputs/default/entry-default-signed.hap

5.2 DevEco 签名目录
签名请在 example 的鸿蒙工程 配置:
example/ohos/
步骤:File → Project Structure → Signing Configs → Automatically generate signature。

六、真机功能验证(Demo)
仓库 example 提供选图 + 裁剪演示,建议按下列顺序测试并截图。
| 步骤 | 操作 | 对应 API |
|---|---|---|
| 1 | 点击 Open Image 从相册选图 | image_picker + sampleImage |
| 2 | 拖动/缩放裁剪框 | Crop 组件 |
| 3 | 点击 Crop Image | cropImage |
| 4 | 查看日志输出裁剪文件路径 | — |

3.27-ohos 已验证项
flutter pub get/analyze无 errorflutter build hap --debug成功- 真机 Demo:选图、裁剪 UI、
cropImage
七、与参考仓的差异说明
| 对比项 | 参考仓(3.7 等) | 本文(3.27-ohos) |
|---|---|---|
| Flutter SDK | 3.7.12-ohos-1.0.6 等 | 3.27.5-ohos-1.0.3 |
| 包版本 | 0.4.1 | 对齐 0.4.1 |
| Dart SDK | <3.0.0 |
>=3.0.0 <4.0.0 |
| Example | 旧空安全写法 | 适配 Dart 3 空安全 |
鸿蒙 API 支持情况(与参考仓一致,节选):
| API / 组件 | ohos |
|---|---|
Crop / Crop.file |
✅ |
cropImage |
✅ |
sampleImage |
✅ |
getImageOptions |
✅ |
requestPermissions |
✅ |
八、常见问题
Q1:build hap 提示配置签名?
在 DevEco 打开 example/ohos,配置自动签名后重试。
Q2:选图无反应?
确认 image_picker 已正确接入;系统选图模式下无需 READ_IMAGEVIDEO。若仍失败,检查 DevEco 签名与真机系统相册是否可用。
Q3:依赖报错找不到 image_crop?
确认 git 地址为 flutter_image_crop_ohos,且已 flutter pub get。
九、总结
- 在 Flutter 3.27.5-ohos-1.0.3 上,基于社区
flutter_image_crop完成 image_crop 0.4.1 适配。 - 提供可运行的 example Demo 与对外仓库 flutter_image_crop_ohos。
- 核心业务可按本文接入:
CropUI、sampleImage、cropImage。
十、参考链接
- 插件仓库:https://gitcode.com/xiaoyangming/flutter_image_crop_ohos
- 参考实现:https://gitcode.com/CPF-Flutter/flutter_image_crop
- 上游包:https://pub.dev/packages/image_crop
- AtomGit:https://atomcode.atomgit.com
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)