Flutter文档打开插件open_document的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter插件open_document的使用指南

open_document插件用于在用户的移动设备和桌面创建文件夹,并支持打开pdf、xlsx、docs、ppt和zip等文件类型。本文将详细介绍如何配置和使用该插件,包括完整的示例代码。

功能概述

  • Android:文件保存在应用内部文档目录下。
  • iOS:文件保存在应用名称下的文件中。
  • Windows:文件保存在Documents目录下。

开始使用

Android配置

  1. res目录下创建一个名为xml的文件夹。
  2. xml文件夹内创建一个provider_paths.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="external_files"
        path="." />
</paths>
  1. AndroidManifest.xml中添加权限和Provider:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.example.open_document_example.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths" />
</provider>

iOS配置

info.plist中添加以下键值对以支持文件打开功能:

<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

使用方法

示例代码

以下是使用open_document插件的一个完整示例,展示了如何下载并打开一个PDF文件:

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:open_document/open_document.dart';

void main() {
  runApp(MaterialApp(home: MyApp()));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    final url = "https://fase.org.br/wp-content/uploads/2014/05/exemplo-de-pdf.pdf";
    final fileName = await OpenDocument.getNameFile(url: url);
    final filePath = await OpenDocument.getPathDocument() + '/' + fileName;

    final isExists = await OpenDocument.checkDocument(filePath: filePath);

    try {
      if (!isExists) {
        filePath = await downloadFile(filePath: filePath, url: url);
      }
      await OpenDocument.openDocument(filePath: filePath);
    } on OpenDocumentException catch (e) {
      print("ERROR: ${e.errorMessage}");
    }
  }

  Future<String> downloadFile({required String filePath, required String url}) async {
    Dio dio = Dio();
    await dio.download(
      url,
      filePath,
      onReceiveProgress: (received, total) {
        print('Download $received/$total');
      },
    );
    return filePath;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Plugin example app')),
        body: Center(child: Text('Running on: $_platformVersion\n')),
      ),
    );
  }
}

此示例展示了如何从网络下载文件并在本地打开它。请注意根据实际情况调整权限设置和文件路径。


更多关于Flutter文档打开插件open_document的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文档打开插件open_document的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中使用open_document插件来打开文档,以下是一个基本的代码示例,展示如何集成和使用该插件来打开不同类型的文档。

首先,确保你已经在pubspec.yaml文件中添加了open_document依赖:

dependencies:
  flutter:
    sdk: flutter
  open_document: ^3.0.0  # 请根据需要检查最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中,你可以按照以下步骤使用open_document插件:

  1. 导入插件
import 'package:open_document/open_document.dart';
  1. 定义一个函数来打开文档
Future<void> openDocument(String filePath) async {
  try {
    // 检查文件是否存在(可选,但推荐)
    final fileExists = await File(filePath).exists();
    if (!fileExists) {
      throw Exception('File does not exist at the specified path.');
    }

    // 使用openDocument插件打开文档
    await OpenDocument.openFile(filePath);
  } catch (e) {
    // 处理异常
    print('Error opening document: $e');
  }
}
  1. 在UI中调用这个函数
import 'package:flutter/material.dart';
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Open Document Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 假设你有一个PDF文件路径
              String filePath = '/storage/emulated/0/Download/sample.pdf';
              // 调用打开文档的函数
              await openDocument(filePath);
            },
            child: Text('Open PDF'),
          ),
        ),
      ),
    );
  }
}

Future<void> openDocument(String filePath) async {
  try {
    final fileExists = await File(filePath).exists();
    if (!fileExists) {
      throw Exception('File does not exist at the specified path.');
    }
    await OpenDocument.openFile(filePath);
  } catch (e) {
    print('Error opening document: $e');
  }
}

在这个示例中,当用户点击按钮时,应用会尝试打开指定路径的PDF文件。请注意,文件路径应该是一个有效的本地文件路径,且该文件应该存在于设备上。

注意事项

  • 确保你有权限访问指定的文件路径。在Android上,你可能需要在AndroidManifest.xml中请求相应的存储权限。
  • 文件类型应该被设备上的某个应用支持。例如,PDF文件通常需要设备上安装一个PDF查看器。
  • open_document插件使用设备的默认应用来打开文件,因此确保设备上已安装能够处理该类型文件的应用。

这个示例提供了一个基本的框架,你可以根据实际需求进行扩展,比如添加更多的文件类型支持、处理不同的异常情况等。

回到顶部