美文网首页
【Flutter】使用image_gallery_saver保存

【Flutter】使用image_gallery_saver保存

作者: 在这蓝色天空下 | 来源:发表于2020-09-16 10:07 被阅读0次

    【Flutter】使用image_gallery_saver保存图片
    https://blog.csdn.net/tianzhilan0/article/details/108278021

    图片保存:image_gallery_saver:https://pub.flutter-io.cn/packages/image_gallery_saver

    代码示例:

        // 申请权限
        await PermissionHandler().requestPermissions([PermissionGroup.storage]);
        // 申请结果
        PermissionStatus permission = await PermissionHandler()
            .checkPermissionStatus(PermissionGroup.storage);
        if (permission == PermissionStatus.granted) {
          var response = await Dio()
              .get(qrcode, options: Options(responseType: ResponseType.bytes));
          final result = await ImageGallerySaver.saveImage(
              Uint8List.fromList(response.data),
              quality: 100,
              name: "gongzhonghao-qrcode");
    
          if (Platform.isIOS) {
            if (result) {
              EasyLoading.showToast('保存成功');
            } else {
              EasyLoading.showToast('保存失败');
            }
          } else {
            if (result != null) {
              EasyLoading.showToast('保存成功');
            } else {
              EasyLoading.showToast('保存失败');
            }
          }
        } else {
          EasyLoading.showToast('权限申请被拒绝');
        }
    

    遇见错误:安卓保存图片失败

    W/System.err( 1511): java.io.FileNotFoundException: /storage/emulated/0/APP-Name/gongzhonghao-qrcode.jpg: open failed: ENOENT (No such file or directory)
    W/System.err( 1511):    at libcore.io.IoBridge.open(IoBridge.java:496)
    W/System.err( 1511):    at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
    W/System.err( 1511):    at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
    W/System.err( 1511):    at com.example.imagegallerysaver.ImageGallerySaverPlugin.saveImageToGallery(ImageGallerySaverPlugin.kt:64)
    W/System.err( 1511):    at com.example.imagegallerysaver.ImageGallerySaverPlugin.onMethodCall(ImageGallerySaverPlugin.kt:36)
    W/System.err( 1511):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
    W/System.err( 1511):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
    W/System.err( 1511):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
    W/System.err( 1511):    at android.os.MessageQueue.nativePollOnce(Native Method)
    W/System.err( 1511):    at android.os.MessageQueue.next(MessageQueue.java:363)
    W/System.err( 1511):    at android.os.Looper.loop(Looper.java:176)
    W/System.err( 1511):    at android.app.ActivityThread.main(ActivityThread.java:8347)
    W/System.err( 1511):    at java.lang.reflect.Method.invoke(Native Method)
    W/System.err( 1511):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
    W/System.err( 1511):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
    W/System.err( 1511): Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
    W/System.err( 1511):    at libcore.io.Linux.open(Native Method)
    W/System.err( 1511):    at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    W/System.err( 1511):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
    W/System.err( 1511):    at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    W/System.err( 1511):    at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8196)
    W/System.err( 1511):    at libcore.io.IoBridge.open(IoBridge.java:482)
    W/System.err( 1511):    ... 14 more
    

    解决方案:

    • 定位到Android 9(API级别28)或更低。
    • 如果您定位到Android 10(API级别29)或更高版本,请在应用的清单文件中将requestLegacyExternalStorage的值设置为true
      添加权限
        <application
            android:requestLegacyExternalStorage = "true">
    

    相关文章

      网友评论

          本文标题:【Flutter】使用image_gallery_saver保存

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