Flutter Web(Windows/Mac)PDF邮件附件实现方案咨询
Flutter Web 实现PDF字节数据邮件附件分享方案
针对Flutter Web环境下无法使用path_provider和dart:io的问题,可通过浏览器原生API实现PDF字节数据的邮件附件分享,以下是具体实现方案:
核心实现代码
import 'dart:html' as html; import 'dart:typed_data'; void sharePdfAttachment(Uint8List pdfBytes) { // 将PDF字节数据转为Blob对象 final pdfBlob = html.Blob([pdfBytes], 'application/pdf'); final pdfFile = html.File([pdfBlob], '我的文档.pdf', {'type': 'application/pdf'}); // 优先使用浏览器原生分享API(支持直接唤起邮件客户端并附加文件) if (html.window.navigator.share != null) { html.window.navigator.share({ 'title': '分享PDF文档', 'files': [pdfFile], }).catchError((err) { print('分享操作失败: $err'); }); } else { // 降级方案:生成PDF下载链接,引导用户下载后手动添加到邮件 final blobUrl = html.Url.createObjectUrlFromBlob(pdfBlob); final downloadAnchor = html.AnchorElement(href: blobUrl) ..setAttribute('download', '我的文档.pdf') ..style.display = 'none'; html.document.body?.append(downloadAnchor); downloadAnchor.click(); html.Url.revokeObjectUrl(blobUrl); downloadAnchor.remove(); print('当前浏览器不支持文件直接分享,请下载文件后手动添加到邮件'); } }
关键说明
- 依赖dart:html:Flutter Web环境下可直接导入该包,用于访问浏览器的Blob、File、Navigator等原生API
- Navigator.share API:
- 支持在Chrome、Edge、Safari 15+等现代浏览器中直接唤起系统分享面板(包括邮件客户端),并自动附加PDF文件
- 要求运行环境为HTTPS(本地开发的localhost域名不受此限制)
- 降级方案:针对不支持
Navigator.share的旧浏览器,生成临时下载链接让用户获取PDF文件,再手动添加到邮件附件
内容的提问来源于stack exchange,提问作者Faizan Ali
相关产品推荐
相关产品推荐

