【问题标题】:Is there an alternative to image_picker_saver dependency是否有替代 image_picker_saver 依赖项
【发布时间】:2019-10-06 19:24:10
【问题描述】:

我正在编写用于在设备中下载图像的代码,但存在 androidx 与 image_picker_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);
      });
    });
  }
});

}

【问题讨论】:

  • 简单地说,您要做的是下载图像并将其保存到文件中?
  • 是的,正在下载图像并保存在下载文件夹中。
  • 唯一的问题是访问下载文件夹。如果我们能找到方法,剩下的就很容易了。如果您可以保存到应用程序目录中,那很容易。
  • 保存到应用目录不会有问题
  • 我稍后会分享完整的代码,现在我有点忙,但为了快速回答,请查看这些包:pub.dev/packages/cached_network_imag - pub.dev/packages/flutter_cache_manager ...

标签: image flutter download


【解决方案1】:

您需要一个用于解码/编码算法的包。我建议这个规范化的包: https://pub.dev/packages/image

我们将使用它。

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<String> createDir() async =>
    await getApplicationDocumentsDirectory().then((dir) => dir.path);

首先,我们将创建图像包提供的[Image]类型变量,然后将其转换为图像包提供的解码和编码的文件:

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;
}

所以,你创建了你的文件,你需要加载它们,这是你需要的方法(你可以通过 [Image.file] 小部件使用恢复的图像):

Future<List<io.File>> loadFiles() async {
  List<io.File> images = <io.File>[];
  final io.Directory dir = await getApplicationDocumentsDirectory();
  print('path: ${dir.path}');
  for (io.FileSystemEntity f in dir.listSync()) {
    if (f is io.File) {
      if (f.path.contains('.jpg')) { //any format you want
        images.add(f);
      }
    }
  }
  return images;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 2013-02-10
    • 2020-10-16
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多