Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 是否有替代图像\u选取器\u保存器依赖关系的方法_Image_Flutter_Download - Fatal编程技术网

Image 是否有替代图像\u选取器\u保存器依赖关系的方法

Image 是否有替代图像\u选取器\u保存器依赖关系的方法,image,flutter,download,Image,Flutter,Download,我正在编写一个在设备中下载图像的代码,但是androidx与图像\u picker\u saver依赖项不兼容。所以有人能为它推荐一个替代方案吗 The complete code- _saveImage(imageNames) async { await PermissionHandler() .checkPermissionStatus(PermissionGroup.storage) .then((status) async { if (status == P

我正在编写一个在设备中下载图像的代码,但是androidx与图像\u picker\u saver依赖项不兼容。所以有人能为它推荐一个替代方案吗

The complete code-
     _saveImage(imageNames) async {
await PermissionHandler()
    .checkPermissionStatus(PermissionGroup.storage)
    .then((status) async {
  if (status == PermissionStatus.denied ||
      status == PermissionStatus.disabled ||
      status == PermissionStatus.unknown) {
    await PermissionHandler().requestPermissions(
        [PermissionGroup.storage]).then((status1) async {
      if (status1.containsValue(PermissionStatus.granted)) {
        await get(imageNames).then((res) async {
          await ImagePickerSaver.saveFile(fileData: res.bodyBytes)
              .then((str) {
            File.fromUri(Uri.file(str));
            Fluttertoast.showToast(
                msg: "Saved to gallery!",
                toastLength: Toast.LENGTH_LONG,
                gravity: ToastGravity.BOTTOM,
                timeInSecForIos: 1,
                backgroundColor: Colors.green,
                textColor: Colors.white,
                fontSize: 15.0);
          });
        });
      }
    });
  } else if (status == PermissionStatus.granted) {
    await get(imageNames).then((res) async {
      await ImagePickerSaver.saveFile(fileData: res.bodyBytes).then((str) {
        File.fromUri(Uri.file(str));
        Fluttertoast.showToast(
            msg: "Saved to gallery!",
            toastLength: Toast.LENGTH_LONG,
            gravity: ToastGravity.CENTER,
            timeInSecForIos: 1,
            backgroundColor: Colors.green,
            textColor: Colors.white,
            fontSize: 15.0);
      });
    });
  }
});

}您需要一个用于解码/编码算法的软件包。我建议这个规范化的包:

我们将使用它

import 'dart:io' as io;
import 'package:http/http.dart' as http;
import 'package:image/image.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
我们需要bodyBytes从网络映像文件写入文件:

Future<dynamic> downloadImage() async =>
    await http.get(url).then((response) => response.bodyBytes);
Future downloadImage()异步=>
等待http.get(url).then((response)=>response.bodyBytes);
获取应用程序工作目录:

Future<String> createDir() async =>
    await getApplicationDocumentsDirectory().then((dir) => dir.path);
Future createDir()异步=>
等待getApplicationDocumentsDirectory()。然后((dir)=>dir.path);
首先,我们将创建[Image]类型变量,该变量由Image package提供,然后我们将其转换为Image package再次提供的解码和编码文件:

Future<io.File> writeFile(String path, var bodyBytes, String fileName) async {
  Image image = decodeImage(bodyBytes);
  io.File file = io.File(join(path, fileName));
  file.writeAsBytesSync(encodePng(image));
  return file;
}
Future writeFile(字符串路径、变量bodyBytes、字符串文件名)异步{
图像图像=解码图像(bodyBytes);
io.File File=io.File(join(路径,文件名));
writeAsBytesSync(encodePng(image));
返回文件;
}
因此,您创建了文件,需要加载它们,这是您需要的方法(您可以通过[Image.file]小部件使用还原的图像):

Future loadFiles()异步{
列表图像=[];
final io.Directory=wait getApplicationDocumentsDirectory();
打印('path:${dir.path}');
对于(dir.listSync()中的io.FileSystemEntity f){
if(f是io.File){
如果(f.path.contains('.jpg')){//您想要的任何格式
增加(f);
}
}
}
返回图像;
}

您需要一个用于解码/编码算法的软件包。我建议这个规范化的包:

我们将使用它

import 'dart:io' as io;
import 'package:http/http.dart' as http;
import 'package:image/image.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
我们需要bodyBytes从网络映像文件写入文件:

Future<dynamic> downloadImage() async =>
    await http.get(url).then((response) => response.bodyBytes);
Future downloadImage()异步=>
等待http.get(url).then((response)=>response.bodyBytes);
获取应用程序工作目录:

Future<String> createDir() async =>
    await getApplicationDocumentsDirectory().then((dir) => dir.path);
Future createDir()异步=>
等待getApplicationDocumentsDirectory()。然后((dir)=>dir.path);
首先,我们将创建[Image]类型变量,该变量由Image package提供,然后我们将其转换为Image package再次提供的解码和编码文件:

Future<io.File> writeFile(String path, var bodyBytes, String fileName) async {
  Image image = decodeImage(bodyBytes);
  io.File file = io.File(join(path, fileName));
  file.writeAsBytesSync(encodePng(image));
  return file;
}
Future writeFile(字符串路径、变量bodyBytes、字符串文件名)异步{
图像图像=解码图像(bodyBytes);
io.File File=io.File(join(路径,文件名));
writeAsBytesSync(encodePng(image));
返回文件;
}
因此,您创建了文件,需要加载它们,这是您需要的方法(您可以通过[Image.file]小部件使用还原的图像):

Future loadFiles()异步{
列表图像=[];
final io.Directory=wait getApplicationDocumentsDirectory();
打印('path:${dir.path}');
对于(dir.listSync()中的io.FileSystemEntity f){
if(f是io.File){
如果(f.path.contains('.jpg')){//您想要的任何格式
增加(f);
}
}
}
返回图像;
}

简单地说,您要做的是下载图像并将其保存到文件中?是的,下载图像并保存到下载文件夹中。唯一的问题是访问下载文件夹。如果我们能找到一条路,其余的都很容易。如果保存到应用程序目录对您来说是可以的,那么很简单。保存到应用程序目录不会有问题。我稍后将分享完整的代码,现在我有点忙,但要快速回答,请查看这些软件包:-…简单地说,您尝试做的是下载图像并将其保存到文件中?是的,正在下载图像并保存在下载文件夹中。唯一的问题是访问下载文件夹。如果我们能找到一条路,其余的都很容易。如果保存到应用程序目录对您来说合适,那么很容易。保存到应用程序目录不会有问题。我稍后将共享完整的代码,现在我有点忙,但要快速回答,请查看这些包:-。。。