Flutter:下载路径提供程序的替代方案 28

问题描述 投票:0回答:3

我在应用程序中有一个功能,用户可以下载他生成的一些内容。数据来自 asset 和 dart 文件字符串。我希望将其下载到 Android 的下载目录中。插件 downloads_path_provider_28 使用已弃用的 api 或嵌入。我想知道有什么插件可以替代它并且运行良好。我已经尝试过 flutter_file_downloader、file_saver、external_path。但没有一个适合我的情况。 https://pub.dev/packages/downloads_path_provider_28 工作正常,但在未来的 flutter 版本中可能不起作用,因此我需要更新的插件支持。

这是我在代码中所做的更改。

import 'dart:io' as io;

// import 'package:downloads_path_provider_28/downloads_path_provider_28.dart';

class KMLGenerator {
  static generateKML(data, filename) async {
    try {
      // final downloadsDirectory = await DownloadsPathProvider.downloadsDirectory;
      // Directory dir = Directory('/storage/emulated/0/Download');
      var path = "/storage/emulated/0/Download/";
      var savePath = io.Directory(path);
      // var savePath = downloadsDirectory?.path;
      final file = io.File("$savePath/$filename.kml");
      await file.writeAsString(data);
      return Future.value(file);
    } catch (e) {
      print(e);
      return Future.error(e);
    }
  }
}

我得到的错误:

I/flutter ( 9449): FileSystemException: Cannot open file, path = 'Directory: '/storage/emulated/0/Download/'/SO2_Emission.kml' (OS Error: No such file or directory, errno = 2)

错误是多余的'/

还有一件事要提,它与 downloads_path_provider_28 一起使用,所以我不确定该插件有什么不同

flutter plugins
3个回答
1
投票

我总是使用这种方法来获取android上的下载目录

var path = "/storage/emulated/0/Download/";
var downloadDir = io.Directory(path);

也许对你有帮助


1
投票

我找到了解决方案:

import 'dart:io';
class KMLGenerator {
  static generateKML(data, filename) async {
    try {
      Directory dir = Directory('/storage/emulated/0/Download');
      var savePath = dir.path;
      final file = File("$savePath/$filename.kml");
      await file.writeAsString(data);
      return Future.value(file);
    } catch (e) {
      print(e);
      return Future.error(e);
    }
  }
}

似乎用数据类型 Directory 初始化确实有魅力。如果有人能告诉我额外的

'/
是如何出现在我之前所做的方法中的,我仍然会很感激。


0
投票

您可以将此包用作备用包。 https://pub.dev/packages/lecle_downloads_path_provider

© www.soinside.com 2019 - 2024. All rights reserved.