You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:35:32