flutter如何保存图片到相册

在Flutter中如何将图片保存到手机相册?我尝试使用image_picker插件选择图片后,想将选中的图片保存到相册,但不知道具体该怎么实现。希望了解完整的代码实现步骤,包括必要的权限配置和插件使用方法。

2 回复

使用image_gallery_saver插件。先安装依赖,然后在代码中调用ImageGallerySaver.saveImage()方法,传入图片数据即可保存到相册。

更多关于flutter如何保存图片到相册的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中保存图片到相册,可以使用 image_gallery_saverphoto_manager 插件。以下是使用 image_gallery_saver 的步骤:

步骤1:添加依赖

pubspec.yaml 中添加:

dependencies:
  image_gallery_saver: ^2.1.1

运行 flutter pub get 安装。

步骤2:配置权限

  • Android:在 android/app/src/main/AndroidManifest.xml 中添加:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  • iOS:在 ios/Runner/Info.plist 中添加:
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>需要保存图片到相册</string>
    

步骤3:请求权限并保存图片

使用以下代码保存图片(支持网络图片、本地文件或Uint8List数据):

import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:http/http.dart' as http;

// 保存网络图片示例
Future<void> saveNetworkImage() async {
  // 请求存储权限(Android需处理动态权限,iOS通常不需要)
  // 权限处理代码省略,可使用permission_handler插件
  
  var response = await http.get(Uri.parse('图片URL'));
  final result = await ImageGallerySaver.saveImage(
    Uint8List.fromList(response.bodyBytes),
    quality: 100,
    name: 'my_image' // 可选文件名
  );
  print(result); // 输出保存结果
}

// 保存本地文件示例
Future<void> saveLocalImage() async {
  ByteData bytes = await rootBundle.load('assets/image.png');
  final result = await ImageGallerySaver.saveImage(
    bytes.buffer.asUint8List(),
    name: 'local_image'
  );
  print(result);
}

注意事项

  • Android 权限:从 Android 10 开始,可能需要使用 Scoped Storageimage_gallery_saver 已适配。
  • iOS 配置:首次保存时会弹出权限请求对话框。
  • 保存结果 result 包含操作状态和文件路径信息。

使用此方法即可轻松将图片保存到设备相册。

回到顶部