Flutter图片画廊保存插件fepe_image_gallery_saver的使用

Flutter图片画廊保存插件fepe_image_gallery_saver的使用

fepe_image_gallery_saver 是一个用于在 Flutter 应用中将图片或文件保存到设备相册的插件。它可以帮助开发者轻松地将从网络或其他来源获取的图片或文件保存到用户的图库中。

使用说明

要使用此插件,首先需要将其添加为 pubspec.yaml 文件中的依赖项。例如:

dependencies:
  fepe_image_gallery_saver: '^1.7.1'

然后运行以下命令以更新依赖项:

flutter pub get

iOS 配置

在 iOS 平台上,您的项目需要使用 Swift 创建。同时,需要在 Info.plist 文件中添加以下键值对:

  • NSPhotoLibraryAddUsageDescription:描述应用为什么需要访问相册权限。这在可视化编辑器中称为“隐私 - 相册添加用途描述”。

Android 配置

在 Android 平台上,需要请求存储权限才能将图片保存到相册中。可以使用 flutter_permission_handler 插件来处理权限请求。此外,在 Android 10 及以上版本中,还需要在 AndroidManifest.xml 文件中添加以下行:

<application android:requestLegacyExternalStorage="true" ...>
</application>

示例代码

保存网络图片

以下是一个示例代码,展示如何从网络下载图片并保存到设备的相册中。可以选择设置保存的质量和文件名。

_save() async {
  // 从网络获取图片数据
  var response = await Dio().get(
    "https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=a62e824376d98d1069d40a31113eb807/838ba61ea8d3fd1fc9c7b6853a4e251f94ca5f46.jpg",
    options: Options(responseType: ResponseType.bytes),
  );

  // 将图片数据保存到相册
  final result = await ImageGallerySaver.saveImage(
    Uint8List.fromList(response.data), // 图片数据
    quality: 60, // 保存质量(范围为1-100)
    name: "hello", // 保存的文件名
  );

  print(result); // 打印保存结果
}

保存网络视频或文件

以下是一个示例代码,展示如何从网络下载视频或文件并保存到设备的相册中。

_saveVideo() async {
  // 获取临时目录
  var appDocDir = await getTemporaryDirectory();
  String savePath = appDocDir.path + "/temp.mp4"; // 定义保存路径

  // 下载视频文件
  await Dio().download(
    "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",
    savePath,
  );

  // 将文件保存到相册
  final result = await ImageGallerySaver.saveFile(savePath);

  print(result); // 打印保存结果
}

完整示例代码

以下是完整的示例代码,展示了如何结合上述功能实现按钮点击事件,保存图片到相册。

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:fepe_image_gallery_saver/image_gallery_saver.dart';
import 'package:dio/dio.dart'; // 引入Dio库用于网络请求
import 'package:path_provider/path_provider.dart'; // 引入path_provider库用于获取临时目录

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() async {
    setState(() {
      _counter++;
    });

    // 示例:保存网络图片到相册
    try {
      var response = await Dio().get(
        "https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=a62e824376d98d1069d40a31113eb807/838ba61ea8d3fd1fc9c7b6853a4e251f94ca5f46.jpg",
        options: Options(responseType: ResponseType.bytes),
      );

      final result = await ImageGallerySaver.saveImage(
        Uint8List.fromList(response.data),
        quality: 60,
        name: "flutter_image",
      );

      print("保存成功: $result");
    } catch (e) {
      print("保存失败: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text('你已经点击了按钮:'),
            Text('$_counter', style: Theme.of(context).textTheme.headline4),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter图片画廊保存插件fepe_image_gallery_saver的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片画廊保存插件fepe_image_gallery_saver的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


fepe_image_gallery_saver 是一个用于在 Flutter 应用中保存图片到设备图库的插件。它可以帮助开发者轻松地将图片保存到用户的相册中,适用于需要保存生成图片、下载图片等场景。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 fepe_image_gallery_saver 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  fepe_image_gallery_saver: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用插件

1. 导入插件

在你的 Dart 文件中导入 fepe_image_gallery_saver 插件:

import 'package:fepe_image_gallery_saver/fepe_image_gallery_saver.dart';

2. 保存图片到图库

使用 FepeImageGallerySaver.saveImage 方法可以将图片保存到图库。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:fepe_image_gallery_saver/fepe_image_gallery_saver.dart';
import 'package:flutter/services.dart';

class SaveImageExample extends StatelessWidget {
  Future<void> saveImage() async {
    // 从网络获取图片的字节数据
    final ByteData imageData = await NetworkAssetBundle(Uri.parse('https://example.com/image.jpg'))
        .load('');
    final Uint8List bytes = imageData.buffer.asUint8List();

    // 保存图片到图库
    final result = await FepeImageGallerySaver.saveImage(bytes);

    // 检查保存结果
    if (result['isSuccess']) {
      print('图片保存成功');
    } else {
      print('图片保存失败: ${result['errorMessage']}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('保存图片到图库'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: saveImage,
          child: Text('保存图片'),
        ),
      ),
    );
  }
}

3. 保存本地图片

如果你有本地的图片文件路径,也可以直接使用 FepeImageGallerySaver.saveFile 方法保存图片:

Future<void> saveLocalImage() async {
  final String filePath = '/path/to/local/image.jpg';

  // 保存本地图片到图库
  final result = await FepeImageGallerySaver.saveFile(filePath);

  // 检查保存结果
  if (result['isSuccess']) {
    print('图片保存成功');
  } else {
    print('图片保存失败: ${result['errorMessage']}');
  }
}
回到顶部