在鸿蒙Next中,Flutter保存图片到本地可以通过以下步骤实现:
1. 添加权限
在 module.json5 文件中添加存储权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.WRITE_IMAGE"
}
]
}
}
2. 使用 image_gallery_saver 插件
推荐使用第三方插件 image_gallery_saver 简化保存流程:
安装插件:
在 pubspec.yaml 中添加:
dependencies:
image_gallery_saver: ^2.1.1
代码示例:
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'dart:typed_data';
// 保存Uint8List格式的图片数据
Future<void> saveImage(Uint8List imageBytes) async {
final result = await ImageGallerySaver.saveImage(
Uint8List.fromList(imageBytes),
quality: 100,
name: 'my_image_${DateTime.now().millisecondsSinceEpoch}',
);
print('保存结果: $result');
}
// 保存网络图片
Future<void> saveNetworkImage(String url) async {
final response = await http.get(Uri.parse(url));
await saveImage(response.bodyBytes);
}
3. 使用鸿蒙原生API(高级方案)
若需直接调用鸿蒙接口:
import 'package:ffi/ffi.dart';
// 通过FFI调用OH_NativeImage_SaveToFile(需配置FFI绑定)
// 具体实现需根据鸿蒙NDK接口文档完成C++层封装
注意事项:
- 需动态申请存储权限(使用
permission_handler 插件)
- 文件路径建议使用
getFilesDir 或外部存储目录
- 网络图片需添加
http 权限(如适用)
推荐方案:
直接使用 image_gallery_saver 插件,兼容性最好且无需处理平台差异。保存后会出现在系统相册中,用户操作体验一致。