如何在Flutter Web中使用js.context.callMethod('open')不新开标签下载文件?
Flutter Web 实现当前标签页内文件下载
你之前使用的js.context.callMethod('open', [zip, '_blank'])会触发新标签页下载,要在当前标签页完成下载,可以通过创建隐藏的<a>标签并模拟点击的方式实现,具体代码如下:
首先确保已导入js包,然后添加以下下载方法:
import 'package:js/js.dart'; void downloadInCurrentTab(String fileUrl, String saveFileName) { // 创建a标签元素 final downloadLink = js.context.callMethod('document.createElement', ['a']); // 设置文件地址 downloadLink.href = fileUrl; // 指定下载后的文件名 downloadLink.download = saveFileName; // 隐藏标签避免页面干扰 downloadLink.style.display = 'none'; // 将标签添加到页面DOM中 js.context.callMethod('document.body.appendChild', [downloadLink]); // 模拟点击触发下载 downloadLink.click(); // 下载完成后移除标签 js.context.callMethod('document.body.removeChild', [downloadLink]); }
调用时直接传入你的zip文件地址和想要保存的文件名即可:
// 示例:传入zip文件的URL和文件名 downloadInCurrentTab(zip, 'archive.zip');
这个方案利用浏览器原生的下载链接特性,通过模拟点击隐藏的下载链接,实现当前标签页内的文件下载,不会打开新标签页。
内容的提问来源于stack exchange,提问作者Muhammed Sibil
相关产品推荐
相关产品推荐

