/// switch_native_web.dart
import 'native.dart' if (dart.library.html) 'web.dart' as switch_value;
class SwitchNativeWeb {
static void downloadFile({required String url,
required String fileName ,required String dataType}){
switch_value.downloadFile(dataType: dataType,fileName: fileName,url: url);}
}
...
/// web.dart
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:universal_html/html.dart' as universal_html;
Future<void> downloadFile(
{required String url,
required String fileName,
required String dataType}) async {
try {
// first we make a request to the url like you did
// in the android and ios version
final http.Response r = await http.get(
Uri.parse(url),
);
// we get the bytes from the body
final data = r.bodyBytes;
// and encode them to base64
final base64data = base64Encode(data);
// then we create and AnchorElement with the html package
final a =
universal_html.AnchorElement(href: '$dataType;base64,$base64data');
// set the name of the file we want the image to get
// downloaded to
a.download = fileName;
// and we click the AnchorElement which downloads the image
a.click();
// finally we remove the AnchorElement
a.remove();
} catch (e) {
print(e);
}
}
3条答案
按热度按时间hc8w905p1#
如果有人还在寻找解决办法。以下是我所做的。
如果锚标签具有download属性,则将直接下载文件。
注意:只有同源请求才支持下载属性
因此,不是将外部URL链接分配给锚元素,而是从PDF数据创建Blob对象,并从中创建对象URL。
我正在使用Firebase来存储文件,所以这里是完整的代码。
mznpcxlj2#
按照以下步骤操作,浏览器可以自动下载文件并保存到下载目录中。
1.交换机本地web.dart
...
...
并使用以下示例代码在需要时调用downloadFile方法:
我只写了与web下载相关的代码(根据问题),你可以在native .dart文件中写与ios和android下载相关的代码。
jaql4c8m3#
使用Dio库。
下载文件
这个video会帮助你。