Flutter和鸿蒙如何保存图片
在Flutter和鸿蒙开发中,如何实现图片保存到本地相册的功能?Flutter这边是否需要用image_gallery_saver插件,鸿蒙是否有对应的API或第三方库支持?希望能提供具体的代码示例和注意事项,比如权限申请和路径处理的细节。
2 回复
Flutter:使用image_gallery_saver或path_provider保存图片到相册或本地目录。
鸿蒙:通过PhotoAccessHelper或MediaLibrary将图片保存到媒体库或指定路径。
更多关于Flutter和鸿蒙如何保存图片的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter和鸿蒙系统中保存图片的方法如下:
Flutter 保存图片
1. 使用 image_gallery_saver 插件(推荐)
import 'package:image_gallery_saver/image_gallery_saver.dart';
// 保存网络图片
Future<void> saveNetworkImage(String url) async {
var response = await Dio().get(url,
options: Options(responseType: ResponseType.bytes));
final result = await ImageGallerySaver.saveImage(
Uint8List.fromList(response.data),
quality: 100,
name: "my_image"
);
print(result);
}
// 保存本地图片文件
Future<void> saveLocalImage(File imageFile) async {
final result = await ImageGallerySaver.saveFile(imageFile.path);
print(result);
}
2. 权限配置
在 android/app/src/main/AndroidManifest.xml 中添加:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
鸿蒙保存图片
1. 使用 MediaLibrary 能力
import mediaLibrary from '@ohos.multimedia.mediaLibrary';
async function saveImageToGallery(pixelMap: image.PixelMap) {
try {
const media = mediaLibrary.getMediaLibrary();
const fileAsset = await media.createAsset(
mediaLibrary.MediaType.IMAGE,
'my_image.jpg'
);
// 将 PixelMap 写入文件
await fileAsset.open('Rw');
const imagePacker = image.createImagePacker();
const arrayBuffer = await imagePacker.packing(pixelMap, {
format: "image/jpeg", quality: 100
});
await fileAsset.write(arrayBuffer);
await fileAsset.close();
console.log('图片保存成功');
} catch (error) {
console.error('保存失败:', error);
}
}
2. 权限配置
在 module.json5 中添加权限:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.WRITE_IMAGEVIDEO",
"reason": "需要保存图片到相册"
}
]
}
}
主要区别
- Flutter:使用第三方插件,跨平台兼容性好
- 鸿蒙:使用原生API,性能更优但仅限鸿蒙系统
两个平台都需要注意权限申请和错误处理,确保用户授权后再执行保存操作。

