Обработчик разрешений не работает во флаттере. Также не работает сохранение изображения в галерею - PullRequest
0 голосов
/ 28 апреля 2020

ошибка, с которой я сталкиваюсь, такова: обработчик разрешений не работает, и сохранение изображения в галерее также не работает.

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 не запрашивает разрешения и не сохраняет изображения в галерее. Я хочу сохранить изображение в галерее, когда пользователь нажимает на кнопку загрузки. Все остальное работает нормально. Пожалуйста, помогите, предоставив ваши ценные ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...