# file_preview
**Repository Path**: gstory0404/file_preview
## Basic Information
- **Project Name**: file_preview
- **Description**: A plug-in that supports flutter preview files,Flutter文档预览
- **Primary Language**: Kotlin
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2021-12-28
- **Last Updated**: 2022-12-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Flutter文档预览插件
## 简介
使用file_preview可以像在使用Flutter weidget一样在andorid、ios页面中预览doc、docx、ppt、pptx、xls、xlsx、pdf等文件。
## 说明
* andorid使用腾讯[TBS](https://x5.tencent.com/)服务,支持doc、docx、ppt、pptx、xls、xlsx、pdf、txt、epub文件的预览
* ios使用WKWebView,WKWebView所支持的均可预览
andorid在线预览时会下载文件至本地再进行预览,所以url文件链接必须是.pdf等文件格式结尾的,同名文件再次预览不再下载直接读取本地缓存。ios不受影响。
## 版本更新
[更新日志](https://github.com/gstory0404/file_preview/blob/master/CHANGELOG.md)
## 支持格式
|格式|android|ios|
|:----|:----:|:----:|
|.doc| ✅ | ✅ |
|.docx| ✅ | ✅ |
|.ppt| ✅ | ✅ |
|.pptx| ✅ | ✅ |
|.xls| ✅ | ✅ |
|.xlsx| ✅ | ✅ |
|.pdf|✅ | ✅ |
|more| TBS限制不可预览 | WKWebView支持均可预览 |
## 常见问题
1、TBS初始化失败
https://docs.qq.com/doc/DYW9QdXJNWFZnbVdz
## 集成步骤
### 1、pubspec.yaml
```Dart
file_preview: ^1.1.4
```
### 2、引入
```Dart
import 'package:file_preview/file_preview.dart';
```
### 3、TBS初始化
由于使用android使用TBS服务,所以必须在FilePreviewWidget使用前完成初始化,不然无法加载。
如本地无TBS不存在会在初始化时进行下载,会耗时3-30秒左右
以下二选一,自动初始化失败时可进行手动初始化
#### 1、 手动初始化
```dart
await FilePreview.initTBS();
```
#### 2、异步自动初始化,无需在flutter中await等待
android目录下新建App继承FilePreviewApp
```dart
class App : FilePreviewApp() {
}
```
AndroidManifest.xml文件中修改
```dart
```
### 3、使用
andorid在build.gradle中开启删除无用资源,打包后如果遇到apk无法加载TBS内核库,可以尝试如下设置(非必须)
```dart
buildTypes {
release {
//关闭删除无用资源
shrinkResources false
//关闭删除无用代码
minifyEnabled false
zipAlignEnabled true
}
}
```
#### 1、预览文件
```dart
//使用前进行判断是否已经初始化
var isInit = await FilePreview.tbsHasInit();
if (!isInit) {
await FilePreview.initTBS();
return;
}
```
```dart
FilePreviewController controller = FilePreviewController();
FilePreviewWidget(
controller: controller,
width: 400,
height: 600,
//path 文件地址 https/http开头、文件格式结尾的地址,或者本地绝对路径
path: widget.path,
callBack: FilePreviewCallBack(onShow: () {
print("文件打开成功");
}, onDownload: (progress) {
print("文件下载进度$progress");
}, onFail: (code, msg) {
print("文件打开失败 $code $msg");
}),
),
```
#### 2、切换文件
```dart
FilePreviewController controller = FilePreviewController();
//path 文件地址 https/http开头、文件格式结尾的地址,或者本地绝对路径
controller.showFile(path);
```
#### 3、删除本地缓存
andorid预览在线文件需要先将文件下载到本地/data/user/0/包名/files/file_preview/目录下,
可以通过以下方法删除缓存,仅andorid生效
```dart
await FilePreview.deleteCache();
```
#### 4、获取TBS版本
```dart
String version = await FilePreview.tbsVersion();
```
#### 5、TBS调试页面
仅andorid生效
```dart
await FilePreview.tbsDebug();
```
#### 6、http配置
高版本andorid、ios默认禁用http,可以设置打开防止文件加载失败
* Android
android/app/src/main/res/xml下新建network_config.xml
```
```
在android/app/src/main/AndroidManifest.xml中使用
```
```
* ios
ios/Runner/Info.plist中
```
NSAppTransportSecurity
NSAllowsArbitraryLoads
```
## 测试文件
https://gstory.vercel.app/ceshi/ceshi.docx
https://gstory.vercel.app/ceshi/ceshi.pdf
https://gstory.vercel.app/ceshi/ceshi.xlsx
https://gstory.vercel.app/ceshi/ceshi.txt
https://gstory.vercel.app/ceshi/ceshi.pptx
## 插件链接
|插件|地址|
|:----|:----|
|字节-穿山甲广告插件|[flutter_unionad](https://github.com/gstory0404/flutter_unionad)|
|腾讯-优量汇广告插件|[flutter_tencentad](https://github.com/gstory0404/flutter_tencentad)|
|百度-百青藤广告插件|[baiduad](https://github.com/gstory0404/baiduad)|
|字节-Gromore聚合广告|[gromore](https://github.com/gstory0404/gromore)|
|Sigmob广告|[sigmobad](https://github.com/gstory0404/sigmobad)|
|聚合广告插件(迁移至GTAds)|[flutter_universalad](https://github.com/gstory0404/flutter_universalad)|
|GTAds聚合广告|[GTAds](https://github.com/gstory0404/GTAds)|
|字节穿山甲内容合作插件|[flutter_pangrowth](https://github.com/gstory0404/flutter_pangrowth)|
|文档预览插件|[file_preview](https://github.com/gstory0404/file_preview)|
|滤镜|[gpu_image](https://github.com/gstory0404/gpu_image)|
## 联系方式
* Email: gstory0404@gmail.com
* Blog:https://www.gstory.cn/
* QQ群: 