鸿蒙 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 版本:

bash 复制代码
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)

整体不是从零写插件,而是:

  1. 以社区 flutter_image_crop 为基线(含 ohos/ ArkTS 原生图像处理)。
  2. 对齐上游包版本 0.4.1,放宽 Dart SDK 约束以支持 Dart 3.x。
  3. 3.27.5-ohos-1.0.3 下执行 pub getanalyzebuild hap
  4. 使用 example 真机验证选图、裁剪 UI 与 cropImage

工程关键目录:

text 复制代码
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 中:

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。

bash 复制代码
flutter pub get

4.2 权限说明

example 通过 image_picker 调用系统相册选择器 (安全访问相册),用户选图后应用仅获得所选文件 URI,无需 声明 ohos.permission.READ_IMAGEVIDEO

4.3 代码示例

dart 复制代码
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

bash 复制代码
cd example
flutter pub get
flutter build hap --debug

成功时可看到类似输出:

text 复制代码
✓ Built ohos/entry/build/default/outputs/default/entry-default-signed.hap

5.2 DevEco 签名目录

签名请在 example 的鸿蒙工程 配置:

text 复制代码
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 无 error
  • flutter 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
  • 核心业务可按本文接入:Crop UI、sampleImagecropImage

十、参考链接


相关推荐
祭曦念1 小时前
鸿蒙应用的生命周期与页面跳转:从入门到实战
华为·harmonyos
轻口味2 小时前
HarmonyOS 6.1.1 全栈实战录 - 88 实战 Ability Kit 启动生命周期预热与快照恢复机
华为·harmonyos·鸿蒙
Goway_Hui2 小时前
【鸿蒙原生应用开发--ArkUI--013】Exercise-tracker 运动记录应用开发教程
华为·harmonyos
想你依然心痛3 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“图谱智脑“——PC端AI智能体沉浸式知识图谱构建工作台
人工智能·ar·知识图谱·harmonyos·智能体
想你依然心痛3 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“律界智脑“——PC端AI智能体沉浸式法律文档智能审查工作台
人工智能·华为·ar·harmonyos·智能体
特立独行的猫a3 小时前
鸿蒙 PC 平台 Python 第三方库移植全景指南
python·华为·harmonyos·三方库移植·鸿蒙pc
大雷神3 小时前
第31篇|位置信息写入照片记录:为什么拍照时要带上地点
harmonyos
Goway_Hui3 小时前
【鸿蒙原生应用开发--ArkUI--012】Currency-converter 汇率转换应用开发教程
华为·harmonyos
李二。4 小时前
鸿蒙 HarmonyOS 校园风登录页面开发实战 —— 基于 ArkTS 的 Stage 模型完整教程
华为·harmonyos