我正在寻找一种方法,使用Flutter应用程序从外部服务器下载大型pdf文件,以便进行离线存储。
但是下载一个大文件(有时是100mb +)需要一些时间。我不希望应用程序陷入等待功能下载。我正在寻找的是一个下载功能,它有一个带有进度报告的回调(类似于:250000/500000字节完成。不一定就是那样。只是我可以使用的东西,并使进度条出来的)。
在Flutter中甚至可以做到这一点吗?我遇到的唯一的事情是HTTP库。但这似乎没有进展回调,只是简单地读取http调用的内容(也没有进度报告)。我希望有人能为我提供一种方法来实现这一目标。
亲切的问候, 凯文沃尔特
修改 C#就是我的意思的完美例子 https://stackoverflow.com/a/9459441/2854656
答案 0 :(得分:5)
int fileSize;
int downloadProgress = 0;
new HttpClient().get('localhost', 80, '/file.txt')
.then((HttpClientRequest request) => request.close())
.then((HttpClientResponse response) {
fileSize ??= respone.contentLength;
response.transform(utf8.decoder).listen((contents) {
downloadProgres += contents.length;
// handle data
});
});
答案 1 :(得分:5)
我想向您推荐dio包,dio是Dart / Flutter的强大Http客户端,它支持拦截器,FormData,请求取消,文件下载,超时等。
dio非常易于使用,在您的情况下,您可以:
await dio.download(url,savePath,
// Listen the download progress.
onProgress: (received, total) {
print((received / total * 100).toStringAsFixed(0) + "%");
}
);
一个完整的例子是here。
更多详情请参阅Github中的dio:https://github.com/flutterchina/dio。