File Viewer / Flutter
EN
文件来源章节导航 ⌄
文档/文件来源

FILE VIEWER FLUTTER

文件来源

使用同一个 FileViewer 组件显示应用资源、原生文件、内存字节或 HTTP(S) 文档。文件来源保留在 Dart 层,原生路径与鉴权头不会放入 JavaScript 桥消息。

应用内资源

dart
const source = FileViewerSource.asset('assets/example.pdf');

在宿主应用的 pubspec.yaml 中声明这个文件。这是验证离线接入最直接的方式,完整步骤见快速开始。

原生文件路径

dart
const source = FileViewerSource.file(
  '/path/to/report.docx',
  name: 'report.docx',
);

由宿主应用完成文件选择和系统授权,再将可访问路径交给组件。浏览器端不能使用任意原生路径;iOS 等平台的受保护文件也需要应用先取得有效访问权限。

内存字节

dart
import 'dart:typed_data';
import 'package:file_viewer_flutter/file_viewer_flutter.dart';

FileViewer fromBytes(Uint8List bytes) {
  final source = FileViewerSource.bytes(bytes, name: 'report.xlsx');
  return FileViewer(source: source);
}

name 为必填项,用真实扩展名标识格式;必要时还可以传入 mimeType。构造函数会复制并保护字节数据。大文件优先使用原生文件或 URL,避免额外的内存副本。

字节来源的会话匹配与字节对象身份有关。需要复用相同文档时,保留并复用同一个 FileViewerSource,不要在每次 build() 中重新复制大字节数组。

HTTP(S) URL

dart
final source = FileViewerSource.url(
  Uri.parse('https://your-api.example/documents/123'),
  name: 'contract.pdf',
  headers: {'Authorization': 'Bearer <your-session-token>'},
);

示例 URL 与令牌均为占位符,请替换成自己的接口与会话凭据。URL 构造函数接收 Uri,只允许 HTTP 或 HTTPS。接口没有扩展名时请设置 name,也可设置 mimeType。

原生端由本地资源层读取远程内容,鉴权头保留在 Dart;跨域跳转会剥离调用者自定义头,HTTPS 降级会被拒绝。Web 端通过浏览器获取远程数据,后端仍需正确配置 CORS。

离线资源随包分发不代表远程文档无需网络。需要离线打开远程文件时,由宿主应用完成下载、加密/缓存策略与权限检查,再使用文件或字节来源。

更换文档

更新 Widget 的 source,或在控制器就绪后调用:

dart
await controller.load(nextSource);

连续切换文件时,组件通过加载代次隔离旧响应。控制器的就绪时机、错误处理与重载方法见控制器与事件。

搜索文档

输入关键词,查找接入文档。

↑ ↓ 选择 ↵ 打开