【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">