【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">
网友评论