【Flutter】使用image_gallery_saver保存图片


图片保存: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">

猜你喜欢

转载自blog.csdn.net/tianzhilan0/article/details/108278021
今日推荐