文件选择器

一个允许您使用原生文件浏览器来选择单个或多个绝对文件路径的包,并支持扩展名过滤。

安装

首先,将file_picker添加为pubspec.yaml文件中的依赖项。

file_picker: ^1.3.7

Android

添加

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

AndroidManifest.xml文件的<application>标签之前添加。这对于访问外部存储中的文件是必需的。

iOS

根据您希望从中选择文件路径的位置,您可能需要为iOS应用的Info.plist文件添加一些键,该文件位于<project root>/ios/Runner/Info.plist

  • UIBackgroundModes,包含fetchremote-notifications键 - 如果您将使用FileType.ANYFileType.CUSTOM,则需要此设置。请说明您的应用为何需要访问后台任务,例如从云服务下载文件。这称为必需的后台模式,在可视化编辑器中分别对应应用从网络下载内容应用响应推送通知下载内容(由于这两种方法实际上并未被覆盖,因此不添加此属性/键可能只会显示警告,但不会阻止其正确使用)。

    <key>UIBackgroundModes</key>
    <array>
       <string>fetch</string>
       <string>remote-notification</string>
    </array>
    
  • NSAppleMusicUsageDescription - 如果您将使用FileType.AUDIO,则需要此设置。请说明您的应用为何需要访问音乐库的权限。在可视化编辑器中,这被称为隐私-媒体库使用说明

    <key>NSAppleMusicUsageDescription</key>
    <string>Explain why your app uses music</string>
    
  • NSPhotoLibraryUsageDescription - 如果您将使用FileType.IMAGEFileType.VIDEO,则需要此设置。请说明您的应用为何需要照片库的权限。在可视化编辑器中,这被称为隐私-照片库使用说明

    <key>NSPhotoLibraryUsageDescription</key>
    <string>Explain why your app uses photo library</string>
    

注意:任何低于11.0的iOS版本都需要Apple开发者计划帐户才能启用CloudKit,并使文档选择器(当您选择FileType.ALLFileType.CUSTOM或其他带有getMultiFilePath()的选项时会发生)能够使用。您可以在此处了解更多。

用法

此包只有两个方法可以使用

FilePicker.getFilePath()

允许您选择单个文件。它接收两个可选参数:用于指定选择器类型的fileType和用于过滤可选文件的fileExtension参数。可用的过滤器是

  • FileType.ANY - 允许您选择所有可用的文件。
  • FileType.CUSTOM - 允许您选择与提供的fileExtension匹配的扩展名的单个路径。
  • FileType.IMAGE - 允许您选择单个图像文件。在iOS上打开画廊。
  • FileType.VIDEO - 允许您选择单个视频文件。在iOS上打开画廊。
  • FileType.AUDIO - 允许您选择单个音频文件。在iOS上打开音乐。请注意,受DRM保护的文件将不会提供路径,而是返回null

FilePicker.getMultiFilePath()

允许您一次选择多个文件并检索其路径。您还可以选择提供fileExtension参数来过滤允许的可选文件。
将返回一个Map<String,String>,其中包含所有选定文件的文件名(key)和相应路径(value)。
目前不支持从iOS画廊(图像和视频)选择多个路径。

用法

因此,一些示例用法可以是:

// Single file path
String filePath;
filePath = await FilePicker.getFilePath(type: FileType.ANY); // will let you pick one file path, from all extensions
filePath = await FilePicker.getFilePath(type: FileType.CUSTOM, fileExtension: 'svg'); // will filter and only let you pick files with svg extension

// Pick a single file directly
File file = await FilePicker.getFile(type: FileType.ANY); // will return a File object directly from the selected file

// Multi file path
Map<String,String> filesPaths;
filePaths = await FilePicker.getMultiFilePath(); // will let you pick multiple files of any format at once
filePaths = await FilePicker.getMultiFilePath(fileExtension: 'pdf'); // will let you pick multiple pdf files at once
filePaths = await FilePicker.getMultiFilePath(type: FileType.IMAGE); // will let you pick multiple image files at once

List<String> allNames = filePaths.keys; // List of all file names
List<String> allPaths = filePaths.values; // List of all paths
String someFilePath = filePaths['fileName']; // Access a file path directly by its name (matching a key)
一些补充说明
  • 在iOS上使用getMultiFilePath()将始终使用文档选择器(即“文件”应用)。这意味着目前不支持照片库的图像/视频或音乐库文件的多选。
  • 当使用FileType.CUSTOM时,不受支持的扩展名将抛出由插件处理的MissingPluginException
  • 在Android上,可用时,应避免使用第三方文件浏览器,因为这些可能会阻止文件扩展名过滤(表现为FileType.ANY)。在这种情况下,您需要在返回时对其进行验证。

当前支持的功能

  • [X]从云文件(GDrive、Dropbox、iCloud)加载路径
  • [X]通过提供文件扩展名(pdf、svg、zip等)从自定义格式加载路径
  • [X]从多个文件加载路径,可选地提供文件扩展名
  • [X]从画廊加载路径
  • [X]从音频加载路径
  • [X]从视频加载路径
  • [X]从任何加载路径
  • [X]从任何选定的文件创建一个File对象

如果您有希望在此包中看到的功能,请在此处添加它。这里。?

演示应用

Demo

示例

查看示例应用程序。

GitHub

https://github.com/miguelpruivo/plugins_flutter_file_picker