我在应用程序中有一个功能,用户可以下载他生成的一些内容。数据来自 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 一起使用,所以我不确定该插件有什么不同
我总是使用这种方法来获取android上的下载目录
var path = "/storage/emulated/0/Download/";
var downloadDir = io.Directory(path);
也许对你有帮助
我找到了解决方案:
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 初始化确实有魅力。如果有人能告诉我额外的
'/
是如何出现在我之前所做的方法中的,我仍然会很感激。