ошибка, с которой я сталкиваюсь, такова: обработчик разрешений не работает, и сохранение изображения в галерее также не работает.
D/permissions_handler(11623): No permissions found in manifest for: 14
W/System.err(11623): java.io.FileNotFoundException: /storage/emulated/0/The Walls/1588072954852.png (No such file or directory)
W/System.err(11623): at java.io.FileOutputStream.open0(Native Method)
W/System.err(11623): at java.io.FileOutputStream.open(FileOutputStream.java:308)
W/System.err(11623): at java.io.FileOutputStream.<init>(FileOutputStream.java:238)
W/System.err(11623): at java.io.FileOutputStream.<init>(FileOutputStream.java:180)
W/System.err(11623): at com.example.imagegallerysaver.ImageGallerySaverPlugin.saveImageToGallery(ImageGallerySaverPlugin.kt:61)
W/System.err(11623): at com.example.imagegallerysaver.ImageGallerySaverPlugin.onMethodCall(ImageGallerySaverPlugin.kt:33)
W/System.err(11623): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:231)
W/System.err(11623): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:93)
W/System.err(11623): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:642)
W/System.err(11623): at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err(11623): at android.os.MessageQueue.next(MessageQueue.java:326)
W/System.err(11623): at android.os.Looper.loop(Looper.java:160)
W/System.err(11623): at android.app.ActivityThread.main(ActivityThread.java:6669)
W/System.err(11623): at java.lang.reflect.Method.invoke(Native Method)
W/System.err(11623): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W/System.err(11623): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I/flutter (11623):
Весь код выглядит следующим образом:
import 'dart:io';
import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:permission_handler/permission_handler.dart';
import 'dart:ui';
import 'package:flutter/cupertino.dart';
class ImageView extends StatefulWidget {
final String imgUrl;
ImageView({@required this.imgUrl});
@override
_ImageViewState createState() => _ImageViewState();
}
class _ImageViewState extends State<ImageView> {
var filePath;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(children: <Widget>[
Hero(
tag: widget.imgUrl,
child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Image.network(widget.imgUrl, fit: BoxFit.cover,)),
),
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
alignment: Alignment.bottomCenter,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
GestureDetector(
onTap: (){
_save();
},
child: Stack(
children: <Widget>[
Container(
height: 50,
decoration: BoxDecoration(
color: Color(0xff1C1B1B).withOpacity(0.8),
borderRadius: BorderRadius.circular(30),
),
width: MediaQuery.of(context).size.width/2,
),
Container(
height: 50,
width: MediaQuery.of(context).size.width/2,
padding: EdgeInsets.symmetric(horizontal: 8, vertical: 8),
decoration: BoxDecoration(
border: Border.all(color: Colors.white54, width: 1),
borderRadius: BorderRadius.circular(30),
gradient: LinearGradient(
colors: [
Color(0x36FFFFFF),
Color(0x0FFFFFFF)
]
)
),
child: Column(children: <Widget>[
Text("Download Wallpaper", style: TextStyle(
fontSize: 16, color: Colors.white70
),),
Text("Image will be saved in gallery", style: TextStyle(
fontSize: 10, color: Colors.white70
),)
],),
),
],
),
),
SizedBox(height: 16,),
GestureDetector(
onTap: (){
Navigator.pop(context);
},
child: Text("Cancel", style: TextStyle(color: Colors.white),)),
SizedBox(height: 50,)
],),
)
],),
);
}
_save() async {
await _askPermission();
var response = await Dio().get(widget.imgUrl,
options: Options(responseType: ResponseType.bytes));
final result =
await ImageGallerySaver.saveImage(Uint8List.fromList(response.data));
print(result);
Navigator.pop(context);
}
_askPermission() async {
if (Platform.isIOS) {
/*Map<PermissionGroup, PermissionStatus> permissions =
*/await PermissionHandler()
.requestPermissions([PermissionGroup.photos]);
} else {
/* PermissionStatus permission = */await PermissionHandler()
.checkPermissionStatus(PermissionGroup.storage);
}
}
}
Я пытался изменить код, но ошибка остается той же. Устройство android не запрашивает разрешения и не сохраняет изображения в галерее. Я хочу сохранить изображение в галерее, когда пользователь нажимает на кнопку загрузки. Все остальное работает нормально. Пожалуйста, помогите, предоставив ваши ценные ответы.