搜索插件、代码仓与 APP 分类

插件详情v3.4.1+1

open_file_plus

一个插件,可以在 Flutter 中调用原生 APP 打开文件,并返回字符串结果,支持 iOS(UTI)、Android(Intent)、PC(FFI)和 Web(dart:html)

AndroidiOS
近 30 天下载
408
喜欢数
96
Pub 分数
140

安装插件

flutter pub add open_file_plus

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

open_file_plus 是一个 Flutter 插件,可在多个平台上使用原生系统应用程序打开文件。它支持 iOS(通过 UTI)、Android(通过 Intent)、桌面端(通过 FFI)和 Web(通过 dart:html)。该包返回一个字符串结果,指示操作成功或失败,从而轻松实现跨平台的文件打开操作。它简化了与原生文件处理系统的集成,无需编写特定于平台的代码。

适合场景

  • 在Flutter应用内打开PDF、图像和文档
  • 启动外部应用程序以查看或编辑文件
  • 在移动和桌面应用程序中集成文件预览
  • 支持文件共享工作流程
  • 在网页和原生平台上实现无缝文档访问

主要特点

  • 跨平台文件打开(Android、iOS、PC、Web)
  • 通过平台特定 API 实现原生应用集成
  • 基于字符串的操作状态结果反馈
  • 简单的 API,设置简单
  • iOS 上的 UTI 支持和 Android 上的 Intents 支持

适合对象

  • 开发文件查看器应用的开发者
  • 需要打开外部文档的应用程序
  • 需要跨平台文件处理的项目
  • 带有文件交互的移动和桌面应用程序
  • 需要触发原生文件操作的网页应用

使用建议

  • 需要正确的文件路径或 URI 输入
  • 可能需要特定平台的权限
  • Web 支持取决于浏览器功能
  • 并非所有文件类型默认都受支持
  • 应为错误情况实现结果处理

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

open_file_plus

pub package

A plug-in that can call native APP to open files with string result in flutter, support iOS(DocumentInteraction) / android(intent) / PC(ffi) / web(dart:html)

This package is forked from here to remove a dangerous permission in android

Usage

To use this plugin, add open_file_plus as a dependency in your pubspec.yaml file.

dependencies:
  open_file_plus: ^lastVersion

Example

import 'package:open_file_plus/open_file_plus.dart';

OpenFile.open("/sdcard/example.txt");
//OpenFile.open("/sdcard/example.txt", type: "text/plain", uti: "public.plain-text");

Support

Android
{
    {".3gp",    "video/3gpp"},
    {".torrent","application/x-bittorrent"},
    {".kml",    "application/vnd.google-earth.kml+xml"},
    {".gpx",    "application/gpx+xml"},
    {".csv",    "application/vnd.ms-excel"},
    {".apk",    "application/vnd.android.package-archive"},
    {".asf",    "video/x-ms-asf"},
    {".avi",    "video/x-msvideo"},
    {".bin",    "application/octet-stream"},
    {".bmp",    "image/bmp"},
    {".c",      "text/plain"},
    {".class",  "application/octet-stream"},
    {".conf",   "text/plain"},
    {".cpp",    "text/plain"},
    {".doc",    "application/msword"},
    {".docx",   "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
    {".xls",    "application/vnd.ms-excel"},
    {".xlsx",   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
    {".exe",    "application/octet-stream"},
    {".gif",    "image/gif"},
    {".gtar",   "application/x-gtar"},
    {".gz",     "application/x-gzip"},
    {".h",      "text/plain"},
    {".htm",    "text/html"},
    {".html",   "text/html"},
    {".jar",    "application/java-archive"},
    {".java",   "text/plain"},
    {".jpeg",   "image/jpeg"},
    {".jpg",    "image/jpeg"},
    {".js",     "application/x-javascript"},
    {".log",    "text/plain"},
    {".m3u",    "audio/x-mpegurl"},
    {".m4a",    "audio/mp4a-latm"},
    {".m4b",    "audio/mp4a-latm"},
    {".m4p",    "audio/mp4a-latm"},
    {".m4u",    "video/vnd.mpegurl"},
    {".m4v",    "video/x-m4v"},
    {".mov",    "video/quicktime"},
    {".mp2",    "audio/x-mpeg"},
    {".mp3",    "audio/x-mpeg"},
    {".mp4",    "video/mp4"},
    {".mpc",    "application/vnd.mpohun.certificate"},
    {".mpe",    "video/mpeg"},
    {".mpeg",   "video/mpeg"},
    {".mpg",    "video/mpeg"},
    {".mpg4",   "video/mp4"},
    {".mpga",   "audio/mpeg"},
    {".msg",    "application/vnd.ms-outlook"},
    {".ogg",    "audio/ogg"},
    {".pdf",    "application/pdf"},
    {".png",    "image/png"},
    {".pps",    "application/vnd.ms-powerpoint"},
    {".ppt",    "application/vnd.ms-powerpoint"},
    {".pptx",   "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
    {".prop",   "text/plain"},
    {".rc",     "text/plain"},
    {".rmvb",   "audio/x-pn-realaudio"},
    {".rtf",    "application/rtf"},
    {".sh",     "text/plain"},
    {".tar",    "application/x-tar"},
    {".tgz",    "application/x-compressed"},
    {".txt",    "text/plain"},
    {".wav",    "audio/x-wav"},
    {".wma",    "audio/x-ms-wma"},
    {".wmv",    "audio/x-ms-wmv"},
    {".wps",    "application/vnd.ms-works"},
    {".xml",    "text/plain"},
    {".z",      "application/x-compress"},
    {".zip",    "application/x-zip-compressed"},
    {"",        "*/*"}
}

You must specify additional permissions if you want to open the respective file types below

Type of media Permission to request Android version
APK files android.permission.REQUEST_INSTALL_PACKAGES -
Images and photos android.permission.READ_MEDIA_IMAGES 13+
Videos android.permission.READ_MEDIA_VIDEO 13+
Audio files android.permission.READ_MEDIA_AUDIO 13+

when Conflict with other plugins about FileProvider, add code below in your /android/app/src/main/AndroidManifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools" package="xxx.xxx.xxxxx">
    <application>
        ...
        <provider android:name="androidx.core.content.FileProvider"
                  android:authorities="${applicationId}.fileProvider"
                  android:exported="false"
                  android:grantUriPermissions="true"
                  tools:replace="android:authorities">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
                       android:resource="@xml/filepaths"
                       tools:replace="android:resource" />
        </provider>
    </application>
</manifest>

when Android dependency 'com.android.support:appcompat-v7' has different version for the compile error, add code below in your /android/build.gradle

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "27.1.1"
            }
        }
    }
}
IOS with UTI (DocumentInteraction Auto)
{
    {".rtf",    "public.rtf"},
    {".txt",    "public.plain-text"},
    {".html",   "public.html"},
    {".htm",    "public.html"},
    {".xml",    "public.xml"},
    {".tar",    "public.tar-archive"},
    {".gz",     "org.gnu.gnu-zip-archive"},
    {".gzip",   "org.gnu.gnu-zip-archive"},
    {".tgz",    "org.gnu.gnu-zip-tar-archive"},
    {".jpg",    "public.jpeg"},
    {".jpeg",   "public.jpeg"},
    {".png",    "public.png"},
    {".avi",    "public.avi"},
    {".mpg",    "public.mpeg"},
    {".mpeg",   "public.mpeg"},
    {".mp4",    "public.mpeg-4"},
    {".3gpp",   "public.3gpp"},
    {".3gp",    "public.3gpp"},
    {".mp3",    "public.mp3"},
    {".zip",    "com.pkware.zip-archive"},
    {".gif",    "com.compuserve.gif"},
    {".bmp",    "com.microsoft.bmp"},
    {".ico",    "com.microsoft.ico"},
    {".doc",    "com.microsoft.word.doc"},
    {".xls",    "com.microsoft.excel.xls"},
    {".ppt",    "com.microsoft.powerpoint.​ppt"},
    {".wav",    "com.microsoft.waveform-​audio"},
    {".wm",     "com.microsoft.windows-​media-wm"},
    {".wmv",    "com.microsoft.windows-​media-wmv"},
    {".pdf",    "com.adobe.pdf"}
}

所属分类

依赖

依赖清单 1 项

源码仓库

使用此插件的项目