美文网首页
【Flutter】image_gallery_saver无法返回

【Flutter】image_gallery_saver无法返回

作者: 峰豆豆 | 来源:发表于2020-09-19 10:26 被阅读0次

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

    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无法返回

          本文链接:https://www.haomeiwen.com/subject/dcleyktx.html