【Flutter】使用image_gallery_saver保存圖片

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

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

代碼示例:

    // 申請(qǐng)權(quán)限
    await PermissionHandler().requestPermissions([PermissionGroup.storage]);
    // 申請(qǐng)結(jié)果
    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('權(quán)限申請(qǐng)被拒絕');
    }

遇見(jiàn)錯(cuò)誤:安卓保存圖片失敗

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級(jí)別28)或更低。
  • 如果您定位到Android 10(API級(jí)別29)或更高版本,請(qǐng)?jiān)趹?yīng)用的清單文件中將requestLegacyExternalStorage的值設(shè)置為true
    添加權(quán)限
    <application
        android:requestLegacyExternalStorage = "true">
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容