【Flutter】image_gallery_saver无法返回iOS保存图片路径问题

最近项目需要追加一个手写签名的功能。所以需要将截屏图片保存并取出。自己记录下,仅供参考,欢迎指错,大佬勿喷。

image_gallery_saver。

pub地址:https://pub.dev/packages/image_gallery_saver
git地址:https://github.com/hui-z/image_gallery_saver

可以将图片保存到本地的插件。详细使用方式可以看作者的pub或者git地址。非常简洁。
支持:
imageBytes
PNG
JPG
JPEG
video
目前插件作者还处于不断更新维护的状态。期待作者能够将插件完善的越来越好。

问题:
Android在新版的插件中,可以将保存到本地文件路径返回。但是iOS却不可以,只能返回true/false。在我们项目里这个返回值并没有实际的作用。

解决方式:

通过path_provider插件
pub地址:https://pub.dev/packages/path_provider

// 获取截屏的图片数据
RenderRepaintBoundary boundary = rootWidgetKey.currentContext.findRenderObject();
var image = await boundary.toImage();
// 将image转化成byte
ByteData byteData = await image.toByteData(format: ImageByteFormat.png);

if (Platform.isAndroid) {// 如果是Android 的话,直接使用image_gallery_saver就可以了
  // 图片byte数据转化unit8
  images = byteData.buffer.asUint8List();
  // 调用image_gallery_saver的saveImages方法,返回值就是图片保存后的路径
  String result = await ImageGallerySaver.saveImage(images);
  // 需要去除掉file://开头。生成要使用的file
  File saveFile = new File(result.replaceAll("file://", ""));
} else if (Platform.isIOS) {
  // 图片byte数据转化unit8
  Uint8List pngBytes = byteData.buffer.asUint8List();
  // 获取手机存储
  Directory applicationDir = await getApplicationDocumentsDirectory();
  // 判断路径是否存在
  bool isDirExist = await Directory(applicationDir.path).exists();
  if (!isDirExist) Directory(applicationDir.path).create();
  // 直接保存,返回的就是保存后的文件
  File saveFile = await File(applicationDir.path + "${DateTime.now().toIso8601String()}.jpg").writeAsBytes(pngBytes);
}

你可能感兴趣的:(【Flutter】image_gallery_saver无法返回iOS保存图片路径问题)