Viewing version 13.1.0. Open the latest package page.

file_picker

13.1.0

A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.

Download archive

Readme

File Picker

File Picker

A plugin that allows you to use the native file explorer to pick single or multiple files, with extensions filtering support.

Currently supported features

  • Uses OS default native pickers
  • Supports multiple platforms (Mobile, Web, Desktop)
  • Supports WebAssembly (Wasm) compilation
  • Pick files using custom format filtering — you can provide a list of file extensions (pdf, svg, zip, etc.)
  • Pick files from cloud files (GDrive, Dropbox, iCloud)
  • Single or multiple file picks
  • Supports retrieving as XFile (cross_file) for easy manipulation with other libraries
  • Different default type filtering (media, image, video, audio or any)
  • Picking directories
  • Picking both files and directories simultaneously
  • Read file content easily via file.readAsBytes() or stream via file.readAsByteStream()
  • Open a save-file / save-as dialog (a dialog that lets the user specify the drive, directory, and name of a file to save)

If you have any feature that you want to see in this package, please feel free to issue a suggestion. 🎉

Compatibility Chart

API Android iOS Linux macOS Windows Web
clearTemporaryFiles() :white_check_mark: :white_check_mark: :x: :x: :x: :x:
getDirectoryPath() :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :x:
pickFileAndDirectoryPaths() :x: :x: :x: :white_check_mark: :x: :x:
pickFile() :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
pickFiles() :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
saveFile() :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:

See the official API reference on pub.dev for further details.

Darwin implementation notes

The iOS and macOS native implementations live under the shared Darwin source tree (file_picker_darwin). The iOS implementation requires iOS 14.0 or newer because it uses PHPickerViewController and PHPickerResult.

Migrating to v13

  1. PlatformFile.length() Returns Future<int?>:

    • null means the length could not be determined (e.g. a failed disk read), distinct from a genuinely empty file, which still returns 0.
    • v12: int bytes = await file.length();
    • v13: int? bytes = await file.length();
    • Tip: You can also use int? syncBytes = file.lengthSync(); to get the length immediately without disk I/O when already reported by the native picker, or combine them: file.lengthSync() ?? await file.length().
  2. Removed Parameters Deprecated Since v12:

    • allowMultiple, withData, withReadStream, and readSequential on pickFiles(): use pickFile() for single-file selection, and PlatformFile.readAsBytes()/readAsByteStream() to read file data.
    • lockParentWindow on pickFiles()/pickFile()/getDirectoryPath()/saveFile(): use WindowsOptions.lockParentWindow or LinuxOptions.lockParentWindow.
    • cancelUploadOnWindowBlur on pickFiles()/pickFile(): use WebOptions.cancelUploadOnWindowBlur.
    • androidSafOptions on pickFiles()/pickFile()/getDirectoryPath(): use androidOptions.

Migrating to v12

Version 12.0 transitions file_picker to a federated plugin architecture.

Key Breaking Changes & Migration Steps

  1. FilePicker.pickFiles() Returns List<PlatformFile>:

    • FilePickerResult has been removed in favor of direct lists of PlatformFile.
    • Returns an empty list ([]) if the user canceled the operation.
    • v11: FilePickerResult? result = await FilePicker.pickFiles();
    • v12: List<PlatformFile> files = await FilePicker.pickFiles();
  2. Single File Picking:

    • Use FilePicker.pickFile() to pick a single file returning PlatformFile?.
  3. Reading Bytes and Streaming:

    • Instead of using withData: true or withReadStream: true flags, use PlatformFile methods directly:
      • Uint8List bytes = await file.readAsBytes();
      • Stream<Uint8List> stream = file.readAsByteStream();
  4. Platform Options:

    • Platform-specific parameters are grouped into configuration options, with implementations per platform:
      • AndroidOptions / FilePickerAndroidOptions
      • DarwinOptions
      • WindowsOptions / FilePickerWindowsOptions
      • LinuxOptions / FilePickerLinuxOptions
      • WebOptions / FilePickerWebOptions
  5. PlatformFile.size Removed:

    • The size property is gone. Reading a file's length is now a method, because on some platforms it means touching the disk.
    • v11: int bytes = file.size;
    • v12: int bytes = await file.length();
    • Since 12.2.0 there is also int? lengthSync(), which returns the length the native picker already reported without doing any I/O, or null when it did not report one. Use file.lengthSync() ?? await file.length() when you want a value either way.

Documentation

For platform-specific setup, see the README of the platform package you're targeting (e.g. file_picker_darwin for macOS entitlements, android_file_picker for Android notes). For the full API, see the official API reference on pub.dev.

Usage

Single file

PlatformFile? file = await FilePicker.pickFile();

if (file != null) {
  print(file.name);
  print(await file.length());
} else {
  // User canceled the picker
}

Multiple files

List<PlatformFile> files = await FilePicker.pickFiles();

if (files.isNotEmpty) {
  for (final file in files) {
    print(file.name);
  }
} else {
  // User canceled the picker
}

Multiple files with extension filter

List<PlatformFile> files = await FilePicker.pickFiles(
  type: FileType.custom,
  allowedExtensions: ['jpg', 'pdf', 'doc'],
);

iOS photo-library asset representation

List<PlatformFile> files = await FilePicker.pickFiles(
  type: FileType.video,
  compressionQuality: 0,
  darwinOptions: const DarwinOptions(
    assetRepresentationMode: DarwinAssetRepresentationMode.current,
  ),
);

DarwinAssetRepresentationMode.automatic is the default. Use current to avoid transcoding when possible, or compatible to request a broadly compatible representation. Non-automatic modes require compressionQuality: 0 and only affect media selected from the iOS photo library.

Confirm button text

List<PlatformFile> files = await FilePicker.pickFiles(
  windowsOptions: const WindowsOptions(acceptLabel: 'Choose'),
  linuxOptions: const LinuxOptions(acceptLabel: 'Choose'),
  darwinOptions: const DarwinOptions(acceptLabel: 'Choose'),
);

Sets the confirm button text of the file dialog. Supported on Windows (pickFile(), pickFiles(), getDirectoryPath(), saveFile()), Linux (same four), and macOS (pickFile()/pickFiles() only). Has no effect on iOS, Android, or Web.

Pick a directory

String? selectedDirectory = await FilePicker.getDirectoryPath();

if (selectedDirectory == null) {
  // User canceled the picker
}

Save-file / save-as dialog

Uri? outputFile = await FilePicker.saveFile(
  dialogTitle: 'Please select an output file:',
  fileName: 'output-file.pdf',
  bytes: pdfBytes,
);

if (outputFile == null) {
  // User canceled the picker
}

Credits

file_picker is Miguel Ruivo's work.

He wrote the first commit on 23 June 2018 and spent the next eight years turning it into the package Flutter reaches for whenever an app needs a file. Six platform implementations, more than a hundred releases, millions of downloads every month, and over a hundred people who sent a patch along the way.

Maintenance moved to this repository in 2026. The architecture, the API and most of the hard problems were solved long before that, and everything here is built on top of them.

Thank you, Miguel.

Changelog

13.1.0

  • Added support for UIScene on iOS.

13.0.0

General

  • BREAKING CHANGE: PlatformFile.length() now returns Future<int?> instead of Future<int>, matching lengthSync(). null means the length could not be determined (e.g. a failed disk read), distinct from a genuinely empty file, which still returns 0. Previously both cases returned 0, with no way to tell them apart. #2197
  • BREAKING CHANGE: Removed the parameters deprecated since the 12.0.0 federated rewrite: allowMultiple and withData/withReadStream/readSequential on pickFiles(), lockParentWindow on pickFiles()/pickFile()/getDirectoryPath()/saveFile(), cancelUploadOnWindowBlur on pickFiles()/pickFile(), and androidSafOptions on pickFiles()/pickFile()/getDirectoryPath(). Use pickFile() for single-file selection, PlatformFile.readAsBytes()/readAsByteStream() to read file data, WindowsOptions.lockParentWindow/LinuxOptions.lockParentWindow, WebOptions.cancelUploadOnWindowBlur, and androidOptions respectively. #2202
  • Raised lower bounds of all platform implementation packages: file_picker_platform_interface ^4.0.0, android_file_picker ^2.0.0, file_picker_darwin ^2.0.0, file_picker_linux ^2.0.0, windows_file_picker ^2.0.0, and file_picker_web ^4.0.0.

Web

  • Fixed FilePickerWebOptions.readSequential having no effect (file_picker_web 4.0.0). #2206

Android & iOS

  • Removed the dead native code paths behind withData (android_file_picker 2.0.0, file_picker_darwin 2.0.0). #2202

12.3.0

Desktop (Windows)

  • Added WindowsOptions.acceptLabel, letting callers set the confirm ("OK") button text on pickFile(), pickFiles(), getDirectoryPath(), and saveFile() dialogs. #1861

macOS

  • Added DarwinOptions.acceptLabel, letting callers set the confirm button text for pickFile()/pickFiles() (NSOpenPanel.prompt). Has no effect on iOS. #1861

12.2.0

General

  • Added PlatformFile.lengthSync(), replacing the size property removed in 12.0. It returns the length the native picker already reported, without any I/O, or null when the platform did not report one, in which case length() still reads it from disk. #2187
  • Raised the lower bounds on the platform implementations and the platform interface together. PlatformFile.lengthSync() is abstract, so an implementation published before it does not satisfy the new interface, and leaving the old bounds would let pub resolve a combination that compiles nowhere.

12.1.3

General

  • Raised the lower bounds on the platform implementations to the first versions built against file_picker_platform_interface 3.2.0. The facade already required ^3.2.0 for the interface itself, but still allowed implementations predating the DarwinOptions parameter added there, so pub could legally resolve a combination that does not compile. #2186

12.1.2

General

  • Stopped importing file_picker_darwin directly from the facade package. skipEntitlementsChecks() now dispatches through the new FilePickerPlatform.skipEntitlementsChecks() hook instead of a type test on FilePickerPlatform.instance. That import pulled dart:io into file_picker's import graph, making the package incompatible with wasm and breaking analysis when resolved against the lowest allowed dependency versions. No behavior change on any platform.

iOS

  • Added darwinOptions (DarwinOptions) to pickFile()/pickFiles(), letting callers set DarwinAssetRepresentationMode to request the photo library return media in its current or a compatible representation instead of always transcoding to the system default (automatic). Restores a way to avoid expensive transcoding for large HEVC, HDR, or slow-motion videos, which existed before the Darwin implementation was rewritten. Non-automatic modes require compressionQuality: 0, mixing the two throws an ArgumentError.

12.1.1

macOS

  • Fixed FilePicker.skipEntitlementsChecks() being a permanent no-op. It now delegates to FilePickerDarwin.skipEntitlementsChecks() when running on macOS, so non-sandboxed apps can actually skip the App Sandbox entitlement checks again.

12.1.0

General

  • Added PlatformFile.extension, restoring the pre-12.0 convenience getter that was dropped during the federated rewrite. Returns the file extension of name without the leading dot, or null if there is none.

iOS

  • Fixed a crash (FileSystemException/OSError: Is a directory) when picking a Live Photo from the gallery. Live Photos are saved by iOS as .pvt packages (directories); the still image contained in the package is now extracted instead of returning the package itself.

12.0.0

Breaking Changes

  • Minimum Requirements: Raised minimum supported versions to Flutter 3.38 / Dart 3.10.
  • iOS Target: Raised minimum supported iOS deployment target to 14.0. Removed DKImagePickerController / DKPhotoGallery dependency chain.
  • API Modifications:
    • saveFile(): fileName and bytes are now required parameters across all platforms.
    • Removed FilePickerResult. pickFiles() now returns Future<List<PlatformFile>> directly (an empty list instead of null, no .files/.count/.isSinglePick wrapper), and pickFile() returns Future<PlatformFile?> for a single selection.
    • pickFiles(): allowMultiple now defaults to true. Use pickFile() for single file selection (allowMultiple is deprecated).
    • Deprecated withData, withReadStream, and readSequential on pickFiles()/pickFile() in favor of PlatformFile.readAsBytes() and PlatformFile.readAsByteStream().
    • Deprecated top-level lockParentWindow and cancelUploadOnWindowBlur parameters in favor of platform-specific option classes (WindowsOptions, LinuxOptions, WebOptions).

Architecture

  • Federated Plugin: Refactored file_picker into a federated architecture with dedicated platform implementation packages (file_picker_platform_interface, android_file_picker, file_picker_darwin, file_picker_linux, windows_file_picker, and file_picker_web).

Features & Enhancements

  • New API: Added pickFile() static method as a convenience wrapper for single file selection.
  • Platform Options: Introduced WindowsOptions, LinuxOptions (with acceptLabel and parentWindow), and WebOptions.
  • Android: Added support for Storage Access Framework (SAF) Persistable URI Grants (AndroidSAFOptions, AndroidSAFHandle, AndroidPlatformFile). Optimized image compression to prevent OutOfMemoryError.
  • iOS & macOS: Unified native implementations into shared Darwin sources. Selection order is now preserved when picking multiple files on iOS.
  • Exception Handling: Exported IllegalCharacterInFileNameException in file_picker.dart.

12.0.0-beta.8

General

  • Exported IllegalCharacterInFileNameException in file_picker.dart so exception handling can be performed by callers. #2077

Android

  • Decodes images with inSampleSize in compressImage to prevent excessive memory usage and OutOfMemoryError on large images. #2083

Desktop & Web

  • Added WindowsOptions (with parentWindowHandle and lockParentWindow), LinuxOptions (with parentWindow and lockParentWindow), and WebOptions (with cancelUploadOnWindowBlur). #2079
  • LinuxOptions.parentWindow automatically formats raw decimal and hex X11 window IDs as x11:0x..., while preserving Wayland handle strings.
  • Deprecated top-level lockParentWindow parameter in favor of WindowsOptions.lockParentWindow and LinuxOptions.lockParentWindow.
  • Deprecated top-level cancelUploadOnWindowBlur parameter in favor of WebOptions.cancelUploadOnWindowBlur.

macOS

  • Passes the custom dialogTitle when selecting a directory via getDirectoryPath(). #2087

12.0.0-beta.7

Web

  • Ensures XFile.fromData is only used on the web if bytes is not null, preventing potential null check errors.

12.0.0-beta.6

General

  • Improved PlatformFile.readAsBytes() so picked files can be read even when withData was not used and the file only has a local path or a stream source.
  • FileType.custom now shares a consistent allowedExtensions validation across platforms, throwing ArgumentError when filters are missing or used with a non-custom file type.
  • The ffi, win32, and flutter_lints dependencies have been updated.

Android

  • Prevents unresolved references when extracting hashCode under a forced JVM version. #2070

12.0.0-beta.5

Android

  • saveFile now writes file data using Kotlin Coroutines (CoroutineScope(Dispatchers.IO).launch), keeping all I/O off the main thread and preventing UI freezes.

iOS

  • Fixed a race condition when dismissing the file picker with a fast swipe, preventing the picker from getting stuck in a multiple_request state until app restart. #2021
  • iOS now preserves the selection order when picking multiple files: the list of returned files will match the order in which the user selected them.
  • saveFile now performs file writing on a background thread (DispatchQueue.global), preventing UI freezes when saving large files.

Web

  • Fixed PlatformFile.readAsBytes() so files picked on Web can recover data from blob: and data: URLs when withData was not used.
  • Added Web fallback to stream file bytes from blob:/data: URLs: when the ReadableStream API is supported.

12.0.0-beta.4

General

  • Added pickFile() static method as a convenience wrapper for single file selection, returning PlatformFile? directly. #1469
  • BREAKING CHANGE: Refactored saveFile() to make fileName and bytes required parameters across all platforms for a more consistent API. Improved the method's documentation for better clarity.
  • Improved documentation for PlatformFile properties (path, bytes, readStream) to clarify nullability and usage across platforms. #1469
  • BREAKING CHANGE: The allowMultiple parameter on pickFiles() now defaults to true. Use pickFile() for single-file selection. (allowMultiple is deprecated and will be removed in a future release.)
  • Deprecated withData, withReadStream, and readSequential on pickFiles()/pickFile(). Users should call PlatformFile.readAsBytes() or PlatformFile.readAsByteStream() to load file data on demand. These parameters will be removed in a future release.
  • Improved PlatformFile.toString() output to display byte length instead of full content.

Android

  • Fixed an issue where FileType.any would prevent subdirectories from being listed in the system file explorer by ensuring EXTRA_MIME_TYPES is correctly passed as an array. #2013
  • Removed explicit Kotlin Gradle Plugin (KGP) application and dependencies from build files to resolve warnings under AGP 9.0+.
  • Updated Android build tooling and dependencies: Android Gradle Plugin bumped to 8.5.2, androidx.core:core and androidx.core:core-ktx updated to 1.18.0, androidx.lifecycle:lifecycle-runtime updated to 2.10.0, and org.apache.tika:tika-core updated to 3.3.0.
  • Migrated Android build files from Groovy to Kotlin DSL (build.gradle.kts, settings.gradle.kts).
  • Added Android AGP compatibility CI workflow.

Darwin

  • Added missing FlutterFramework dependency to Package.swift for Swift Package Manager (SPM) compatibility.

12.0.0-beta.3

General

  • Added onFileLoading callback to saveFile and implemented status tracking via an event channel. saveFile now reports loading status (for example FilePickerStatus.loading and FilePickerStatus.done).
  • Offloaded file saving (writing bytes) to a background isolate to avoid blocking the UI when saving large files.
  • Ensured the event subscription used for loading status is always cancelled in a finally block to prevent leaks and spurious events.

Android

  • Fixed Android plugin registration when using AGP 9+ with android.builtInKotlin=false, while preserving support for older AGP setups.

12.0.0-beta.2

General

  • Updated dependencies: flutter_plugin_android_lifecycle to 2.0.34, path to 1.9.1, win32 to 6.2.0, cross_file to 0.3.5+2, web to 1.1.1, and dbus to 0.7.12.

Android

  • Added a controlled out_of_memory error when picking large files with withData, avoiding Android crashes and recommending withReadStream as a safer alternative for large or multiple selections. #1997 Breaking Change: FileType.image now opens the native image gallery instead of the document picker, ignoring allowedExtensions on Android. #2004

12.0.0-beta.1

General

  • Raised the minimum supported Flutter/Dart version to Flutter 3.38 / Dart 3.10 across all platforms. #1980

Windows

  • Migrated win32 dependency to 6.0.0 and updated the Windows file picker implementation to match the new Win32/COM APIs. #1980

Darwin

  • Migrated the iOS and macOS native implementations to shared Darwin sources.
  • BREAKING CHANGE: The minimum supported iOS deployment target is now 14.0.
  • Removed the DKImagePickerController / DKPhotoGallery dependency chain from the Darwin iOS path.

Android

  • Implemented support for Android Storage Access Framework (SAF) Persistable URI Grants, allowing long-term access to files and directories across device reboots. #1825 #721
  • Added AndroidSAFOptions and AndroidSAFHandle to configure and manage persistent permissions.
  • Introduced AndroidPlatformFile as a subclass of PlatformFile to encapsulate SAF-specific metadata.
  • Updated the Android Gradle Wrapper to 8.7 to ensure compatibility with Android Gradle Plugin (AGP) 8.5.1.
  • Improved saveFile naming behavior when a duplicate file exists, normalizing duplicate names to keep the extension suffix (for example, file (1).bak instead of file.bak (1)). #1947

Web

  • Fixed pickFiles() default withData behavior in the public API to correctly default to true on web when not explicitly provided. #1987

11.0.3

Android

  • Removed the Apache Tika dependency (~300 KB) used for MIME type detection in saveFile(). MIME types are now resolved from the file name extension via MimeTypeMap, with URLConnection.guessContentTypeFromStream as a content-sniffing fallback when no extension is available. #2101

11.0.2

Android

  • Fixed a Path Traversal vulnerability (CWE-22) when resolving file paths from external content providers. #1967

Linux

  • Fixed "Cannot add to a fixed-length list" crash when opening or saving files with an initial directory on Linux. #1976

11.0.1

Android

  • Fixed backward compatibility with Android Gradle Plugin (AGP) versions below 9.0. #1973

11.0.0

General

  • BREAKING CHANGE: Refactored FilePicker class to use static methods instead of an instance-based approach. Users should now call FilePicker.pickFiles(), FilePicker.getDirectoryPath(), and FilePicker.saveFile() directly.
  • Added cancelUploadOnWindowBlur to the public pickFiles API (Web only). #1961
  • Reordered and cleaned up exports in file_picker.dart.

Web

  • Added WASM support for the web file picker. #1950

Android

  • Fixed an issue where file type selection (audio, video, media) was not being considered correctly on Android. #1959
  • Updated Android package to support AGP 9. #1942

Desktop (macOS)

  • Added a new method, skipEntitlementsChecks(), to allow users to bypass entitlements checks on macOS when using the plugin without Sandbox enabled. #1845

10.3.11

Linux

  • Fixed a crash when initialDirectory contains special characters #1963

10.3.10

General

  • Reverted breaking changes accidentally introduced in 10.3.9 to maintain Semantic Versioning compliance.

Android

  • Updated Tika library to resolve vulnerability CVE-2025-66516 and CVE-2025-54988 (Critical XXE vulnerability).

10.3.9

Android

  • Updated Apache Tika to 3.2.3 to address CVE-2025-66516 and CVE-2025-54988 (Critical XXE vulnerability).
  • Support Gradle 9

10.3.8

iOS

  • Rename FileUtils to FilePickerUtils #1921

Android

  • Restores the ms[df] URI handling logic in FileUtils.kt to fix file selection returning null on some devices.

10.3.7

Android

  • Fixed an issue where file type filtering was not being applied correctly, now only displaying files that match the selected MIME types. #1906

10.3.6

Android

  • Added support for 16 KB page sizes. #1888

10.3.5

iOS

  • Fixed an error when loading large files (>= 2GB~).

10.3.4

Android

  • Detect HEIC and HEIF extensions as valid image
  • Use compression format based file extension when compressing images.

10.3.3

Android

  • Updated compileSdk to use flutter.compileSdkVersion. #1842

Linux

  • Fixed an issue where initialDirectory was not working. #1878

10.3.2

Linux

10.3.1

General

  • Fixed onFileLoading handler to process status changes only when data is a bool.

10.3.0

Desktop

Android

  • Fixed an issue where CSV files were not properly filtered during file selection. #1849 @SoftWyer

Web

10.2.4

Android

  • Fixed an issue where custom MIME types were failing to load picking files on Chromebook. #1858 @vicajilau

10.2.3

General

  • Fixed build failures on Flutter 3.24 caused by changes to address Win32 deprecation warnings on Windows. #1855 @vicajilau

10.2.2

Android

  • Fixed an issue where some files would incorrectly append a .txt extension when saving files on Android. @vicajilau

10.2.1

Android

  • Fixed an issue where the image upload would not display the loading indicator.

10.2.0

Desktop

  • Added support for webp images on Desktop platforms. #1491

Android

10.1.9

Android

  • Fixed an issue when a folder is selected on an external storage #1801

10.1.8

Android

  • Fixed an issue when a folder is selected #1802

10.1.7

Web

  • Fixed a memory leak on the web.

10.1.6

Android

  • Fixed an issue when you try to select more than one file#1796
  • Fixed the app not filter correctly for the selected file types #1792

10.1.5

iOS

  • Fixed an app crash when calling .saveFile twice and cancelling the native save operation via the UI #1626 @Leapward-Koex
  • Fixed a .saveFile future never completing when .saveFile is called twice without waiting for the first completion. @Leapward-Koex

10.1.4

Android

  • Fixed an issue where paths were loaded with duplicated endings. #1767

10.1.3

Android

  • Fixed an issue loading files. #1777

10.1.2

Android

10.1.1

Android

  • Migrated Android code base from Java to Kotlin.
  • Fixed an issue where compressed images were always saved as JPEG files. #1738@vicajilau
  • Fixed an issue where files without extension were not saved properly. @vicajilau

iOS

  • Fixed an issue where compressionQuality on iOS was not loaded properly. #1761

10.1.0

Desktop (macOS)

  • Introduced a new method, pickFileAndDirectoryPaths(), which displays a dialog enabling users to select both files and directories simultaneously. The method returns their absolute paths. Only available for macOS.

10.0.0

General

  • BREAKING CHANGE: The compressionQuality property in the pickFiles method now defaults to 0.
  • BREAKING CHANGE: The allowCompression property has been deprecated in favor of compressionQuality, and now defaults to false.

Android

  • Fixed a permission denied exception on Android 11 or lower when compressionQuality is not 0. (#1742). @vicajilau
  • Fixed an issue where images were duplicated to the "Pictures" folder on Android. (#1743) @vicajilau

9.2.3

Desktop (macOS)

  • Fixed an issue when the active viewController is not a FlutterViewController.

9.2.2

Desktop (macOS)

  • Updated the file picker to check for missing entitlements, instead of failing silently. @vicajilau.

9.2.1

Desktop (macOS)

  • Present file picker panel as a sheet modal to the Flutter application window. #1734

9.2.0

Desktop (macOS, Windows, Linux)

  • Fixes an inconsistency for saveFile that did not save the file, when bytes are provided on desktop platforms. @vicajilau.

9.1.0

Web

  • Added an implementation for saveFile() on the web. @vicajilau.

9.0.3

Android

  • Added ProGuard consumer rules to automatically exclude androidx.lifecycle.DefaultLifecycleObserver from obfuscation.

9.0.2

Android

  • Fixes: File streams not getting closed.

9.0.1

Windows

  • Move getDirectoryPath() to its own isolate to avoid COM initialization conflicts with other plugins #1713 @tguerin.

9.0.0

Web

  • BREAKING CHANGE: pickFiles() now loads files as blobs. See the note in the updated wiki

8.3.7

Android

  • Updated example project Android sources. @vicajilau

8.3.6

General

  • Added compatibility with Flutter 3.29. @vicajilau.

Desktop (Windows)

  • Fixes the issue under Windows that could be raised when another plugin uses CoInitializeEx and the File Explorer windows doesn't popup. #1708

8.3.5

Android

  • Fixes allowCompression not working on Android. 1633

8.3.4

Android

8.3.3

General

  • Updates flutter_plugin_android_lifecycle, ffi, path, win32, cross_file and web dependencies @vicajilau.
  • Updates CI/CD with new dependencies @vicajilau.

8.3.2

Android

  • Fix pickFiles for Android with launchMode=singleInstance #1700, #1404

8.3.1

iOS

8.3.0

Desktop (macOS) && iOS

  • Adds support for Swift Package Manager for compatibility with new projects #1582

8.2.0

Desktop (macOS)

  • Reimplement macOS file picker using method channels (fixes #1492, #1445, #1674, #1685)
  • BREAKING CHANGE: pickFiles() now requires the com.apple.security.files.user-selected.read-only entitlement on macOS. Without this entitlement, the file picker will not open, and the method will return null. See the note in the updated wiki

8.1.7

iOS

  • Fix Image Picker to Handle Partial Failures Gracefully #1554

8.1.6

Android

  • Fix Android compile error #1643

8.1.5

Android

  • Fix #872 by removing unnecessary external storage permission

8.1.4

iOS

  • Fixes a crash when sometimes user swipe the modal down and call it again. 1357

8.1.3

Android

  • Fixes a null object reference error #1604

8.1.2

Android

  • Fixes a cache deletion issue #1505

8.1.1

Web

  • Migrate the web example to use the new web bootstrapping, introduced in Flutter 3.22.

8.1.0

General

  • Updates the minimum Flutter version to 3.22.0, to support Dart 3.4.

Web

  • Updates the package:web dependency to 1.0.0.
  • Removes a redundant FilePickerWeb.platform static field. Use FilePicker.platform instead.

8.0.7

General

  • Fixes an issue relating to incorrect registration of platform-specific implementations. #1555.
  • Fixes an issue that required users to use kIsWeb and FilePickerWeb when running on the web.

8.0.6

Android

Updates the minimum Android SDK version to 21, to match the current Flutter minimum Android SDK version. Fixes #1522, #1528, and #1531. Thanks @navaronbracke.

8.0.5

Web

Release picked file data in memory to avoid memory leak

8.0.4

Android

Removes references to Flutter v1 android embedding classes.

8.0.3

Web

Fixes a TypeError with pickFiles() when using the HTML renderer.

8.0.2

iOS

Fixes the bug #1412 that picking a folder in iOS causes the original folder to be deleted.

8.0.1

iOS

Fixes an issue preventing compilation on iOS when using Pod::PICKER_DOCUMENT = false.

8.0.0+1

Removes linter warnings and fixes CI/CD.

8.0.0

Desktop

Removes Flutter GO support.

iOS

Adds privacy manifest #1418.

7.1.0+1

Fixes typo on docs (there was some refernces to FileType.all instead of the correct FileType.any).

7.1.0

General

  • Adds xFiles getter to [FilePickerResult] and XFile to PlatformFile to retrieve a List<XFile> or single XFile accordingly.
  • Bumps win32, flutter_plugin_android_lifecycle, plugin_platform_interface and lints versions.
  • Fixes NPE when compressing images from gallery on Android 14 #1455. Thanks @mauriziopinotti.
  • Other minor bugs & fixes.

7.0.2

Desktop (Linux)

  • File picker extensions for Linux Zenity are case insensitive now
  • Fixes #1322

7.0.1

Android

Fixes an issue where sequencial picks could replace the previous file #1466. Thanks @Arsanjuan87.

7.0.0

iOS & Android

Adds possibility to save files on mobile platforms as well #1452. Thanks @Samoy.

7.0.0

Mobile (Android, iOS)

Save file to mobile platforms with bytes.

6.2.1

Desktop (Windows)

The initialDirectory parameter of getDirectoryPath() now works (#970).

6.2.0

Android

Add ability to compress images on android by specifying a compression quality value ([#735] (https://github.com/vicajilau/flutter_file_picker/issues/735)).

6.1.1

Android

Android's CSV mime type is text/comma-separated-values. Added standard text/csv when the CSV extension is specified which fixes issues when picking CSV files from Google Drive on Android devices.

6.1.0

Web

  • Fixed endless loop on ios safari when canceling picking. (#1364). Thank you @test0terter0n!
  • Add readSequential flag for web. If readSequential is true, order of picked files will be preserved. If flag is false, files will be read parallel. Thank you @test0terter0n!

6.0.0

Update minimum Flutter version to 3.7.0.

iOS

  • Update minimum iOS version to 11.0.
  • Fix several warnings in the iOS plugin implementation.

5.5.0

iOS

  • Fix if selecting from gallery multiple files from remote sources (eg GoPro, Drone) imported to the device gallery and uploaded to iCloud they would have the same file name and it shows only one image repeated
  • Fix returned images are in different onder from the gallery selection

5.3.4

Fix #1317

5.3.3

Fix #1312

5.3.2

Desktop (Windows)

Bumps the dependency win32 to 5.0.2 (#1281). Thank you @frg2089!

5.3.1

Bump Dart SDK lower bound to <4.0.0 to support Dart 3

5.3.0

Android

Updates Gradle to version 7.5 Adds the namespace property for compatibility with Gradle 8

5.2.11

Desktop (Windows)

Updates dependencies, including win32 bump to 4.1.3 (#1255).

5.2.10

Desktop (Windows)

Fixes the bug that the result of the save-file dialog was incorrect when it was invoked with a long default file name but the user selected a file with a much short file name (#1257).

5.2.9

General

Fixes the errors Type 'Uint8List' not found and 'Uint8List' isn't a type (#1260). Thank you @miguelslemos!

5.2.8

Desktop (Windows)

Fixes the bug that the current directory sometimes changed after the user picked a file. Now, after the dialog is closed, the current directory is automatically restored to its original value even if the user changed the directory while searching for files (#1254). Thank you @Tokenyet!

Desktop (Linux)

Fixes the behavior of the saveFile() dialog on Ubuntu/Kubuntu. This fix should have been committed in the previous version 5.2.7 but was forgotten. Now, when the user selects an already existing file, then Ubuntu prompts the user to confirm overwriting this file. This change finally makes the dialog behave the same on all desktop platforms (macOS, Linux, and Windows) (#989).

5.2.7

Desktop (Windows)

Fixes the behavior of the saveFile() dialog on Windows. Now, when the user selects an already existing file, then Windows prompts the user to confirm overwriting this file. This change makes the dialog behave the same on all desktop platforms (macOS, Linux, and Windows). Previously, Windows would not have asked the user for confirmation (#989).

5.2.6

Web

  • Increase time to wait on js result

5.2.5

iOS

  • Fix preprocessor definitions in podspec (thanks @tomk9)

5.2.4

Desktop (Windows)

  • Calling pick/save file dialog will no longer freeze ui thread.

5.2.3

iOS

  • Fixes an issue when picking live photos where the key photo was changed.

5.2.2

Android

  • Fix deprecation warning for getParcelable(String key) method.

5.2.1

Android

  • Removed build constant TIRAMISU to fix build error if targeting API 32 or less (#1140, #1124)

5.2.0+1

  • Reverts 5.2.0 due to multiple regressions.

5.2.0

Android

  • Fixes issue with caching on android
  • Files will be retrieved without caching to avoid delay (Only cached if paths cannot be retrieved directly )

5.1.0

Desktop (Windows)

  • Update Dependencies to latest versions (Win32 2.7.0 to 3.0.0). (Thank you @ishangavidusha)
  • Set default dialog title to empty. (Thank you @whuhewei)

iOS

Fixes an issue when picking live photos. (Thank you @nagibazad)

Android

Removes READ_EXTERNAL_STORAGE on SDKs targeting 33 or above. (Thank you @alexmercerind)

5.0.1

Android

Replaces random number generation with milliseconds timestamp in file name fallback.

5.0.0

General

Updated dependecies (most importantly is upgrade from ffi 1.1.2 to 2.0.1). Update lints from 1.0.1 to 2.0.0 (with several fixes of code).

4.6.1

iOS

Handle UTTypeCreatePreferredIdentifierForTag returning NULL. This prevents a crash observed on the iOS simulator on Apple Silicon (#1040).

4.6.0

iOS

Add conditional compilation of media, audio and document pickers for iOS. This prevents error messages for permissions (NSPhotoLibraryUsageDescription, NSAppleMusicUsageDescription, etc.) when publishing to app store connect, in case you don't need either category. This addresses #783 in a different way.

4.5.1

Web

Adds display:none to the internal input element to fix a display issue in specific scenario's.

4.5.0

Desktop (Windows)

Changes the implementation of getDirectoryPath() on Windows to provide a modern dialog that looks the same as a file picker dialog (#915).

4.4.0

Desktop (Linux, macOS, and Windows)

Adds the additional parameter initialDirectory to configure the initial directory where the dialog should be opened. This parameter is supported for all three dialogs (pick files, pick directory, and save file). The only exception is that the parameter does not work on Windows for the function getDirectoryPath(). Please note that this feature has not been implemented for Android and iOS.

4.3.3

Desktop (Linux)

Introduces two fixes for the KDE Plasma Linux implementation which uses kdialog to open the file picker dialogs. Firstly, the selection of multiple files is fixed so that file paths with blanks/spaces are handled correctly. Secondly, file type filters are implemented. Thank you @w1th0utnam3.

4.3.2

Desktop (Windows)

Fixes the issue under Windows that the save-file dialog did not open if the specified file name contained an illegal character. Windows prohibits the usage of reserved characters in file names. Now the exception IllegalCharacterInFileNameException is thrown if the specified file name contains forbidden characters (#926).

4.3.1

Desktop (Linux)

Adds KDE Plasma's kdialog arguments, allowing filepicker to invoke kdialog for file system manipulation using shell scripts on distributions that use KDE Plasma as their Desktop Environment and don't ship zenity or qarma.

4.3.0

Desktop (Windows)

Adds the parameter lockParentWindow for Windows desktop. This parameter makes the file picker dialog behave like a modal window. That is, the file picker always stays in front of the Flutter window until it is closed. Thank you @vinicios-cervantes.

4.2.8

Desktop (Windows)

Fixes the issue under Windows that the user could not select more than about 256 files (depending on the length of the file paths) because the buffer size for storing the selected file paths was too small. (#918).

4.2.7

Desktop (macOS & Windows)

Fixes the issue under Windows that the user could select all file types even though a file type filter was enabled. This error existed because the user could select the entry All Files (*.*) in the file type filter dropdown. Also, fixes the bug under macOS that users could select files without file extension even when one of the pre-defined file type filters (audio, image, video, or media) was enabled. (#871).

4.2.6

Android

Fixes linting error during builds (#851).

4.2.5

Desktop (macOS)

Fixes the issue of picking filenames that contain a comma followed by a space (#890).

4.2.4

iOS

Improves error handling when device can't fetch files due to low storage space (#885).

4.2.3

iOS

Fixed an issue that was creating a crash when media in PHPickerViewController in iOs was tapped several times very fast, we check that _result is not empty to avoid the crash. No Github issue created.

4.2.2+1

Android

Reverts Android READ_EXTERNAL_STORAGE permission removal.

4.2.2

Android

Removes <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> permission from the platform implementation Manifest since may not be required for some applications and devs can manually add it to their own application if needed (#864).

4.2.1

Android

Fixes an issue where onFileLoading would be called while picking directories (#863).

4.2.0

Adds the identifier property to the PlatformFile which references the original file identifier for both iOS & Android (#804).

4.1.6

Desktop (macOS)

Fixes the issue that users could not pick .app files on macOS because FilePicker tried to determine the file size of .app files. On macOS, these special kind of files are actually Unix directories in a special format (read more on StackExchange). Now, if a file is picked, which is actually a directory, then the file size will be zero. (#856)

4.1.5

Web
  • Fixes an issue that would prevent the call to return when both withReadStream and allowMultiple were set. (#843).
  • Addresses an issue in the example app.

4.1.4

Android

Addresses an issue where multiple media files couldn't be picked in some 3rd party explorers (#846). Thank you @innim98.

4.1.3

iOS

Fixes an issue where Live Photos were being picked as .pvt packages (since iOS 15). From now on, if allowCompression is set to true, Live Photos will automatically be converted to static JPEG pictures. (#835)

4.1.2

Desktop (Linux)

Fixes the issue that on Linux the file type filter FileType.any did not allow the selection of files without file extension. (#836)

4.1.1

iOS

Fixes an issue that would result in picker being dismissed by pulling down the modal sheet without an event. (#828)

Web

Addresses an issue when comparing files on Web would result in an error due to path not being accessible. (#822)

4.1.0

Extends API by new function saveFiles() for opening a save-file dialog as requested in #799. This feature is only supported on desktop platforms (Linux, macOS, and Windows).

4.0.3

Makes the path getter nullable to match with its property (#823).

4.0.2

Desktop (Windows)

Fixes custom extension filter. Thank you @jgoyvaerts.

4.0.1

General

Overrides equality and toString for platform_file and file_picker_result for better comparison different results. Thank you @Nolence.

iOS
  • Changes the presentation type of the picker from UIModalPresentationCurrentContext to UIModalPresentationAutomatic (#813).
Web
  • Fixes regression of #746.
  • Updates exception text when trying to access path on Web. Thank you @maxzod.

4.0.0

Desktop support added for all platforms (MacOS, Linux & Windows) (#271)

From now on, you'll be able to use file_picker with all your platforms, a big thanks to @philenius, which made this possible and allowed the flutter_file_picker_desktop to be merged with this one.

Have in mind that because of platforms differences, that the following API methods aren't available to use on Desktop:

  • The onFileLoading() isn't necessary, hence, FilePickerStatus won't change, since it hasn't any effect on those;
  • clearTemporaryFiles() isn't necessary since those files aren't created - the platforms will always use a reference to the original file;
  • There is a new optional parameter dialogTitle which can be used to set the title of the modal dialog when picking the files;
Web

Adds onFileLoading() to Web. (#766).

3.0.4

Android
  • Addresses an issue where an invalid custom file extension wouldn't throw an error when it should. Thank you @Jahn08.
  • Fixes getDirectoryPath() #745. Thank you @tomm1e.

3.0.3

Web

  • Removes analysis_options.yaml from the plugin and fixes the Don't import implementation files from another package warning (#746).

Android

  • Addresses an issue where bytes might be missing after first picking when withData is set to true. (#616).

Desktop (GO)

  • Patches README import path. (Thank you @voynichteru)

3.0.2+2

3.0.2

General
  • name and size properties are now non-nullable types.
Docs
  • Updates README;
  • Updates API docs;
Example
  • Updates Android example app to V2;
Android
  • Removes deprecated call warnings;
Other
  • Adds analysis_options.yaml with linter rule to surpress warnings from generated_plugin_registrant.

3.0.1

Android

  • Use MediaStore Opener (which goes through the gallery) instead of default explorer. (Thank you @tmthecoder).

Web

  • Add event when canceling the picker. (Thank you @letranloc).

Other

  • Updates example app to null safety.

3.0.0

Adds null safety support (#510).

2.1.7

iOS

  • Fixes an issue where a crash could happen when picking a lot of media files in low memory devices (#606).
  • Updates preferredAssetRepresentationMode. Thank you @nrikiji.

2.1.6

  • Addresses an issue on iOS 14 and later where events onFileLoading events weren't being provided (#577).

2.1.5+1

  • Web: Updates size property from PlatformFile to be in bytes instead of kb;
  • Applies minor refactor to example app. Thank you @Abhishek01039;

2.1.5

iOS & Android: Updates size property from PlatformFile to be in bytes instead of kb.

2.1.4

iOS: Fixes iOS ViewController which is nil when UIWindow.rootViewController have changed. (#525). Thank you @devcxm.

2.1.3

Android: Updates file name handling method. (#487)

2.1.2

Desktop (Go): Fixed desktop plugin implementation. Thank you @DenchikBY. (#382)

2.1.1

iOS: Fixes an issue that could result in a crash when selecting a media item twice. (#518)

2.1.0

Adds withReadStream that allows bigger files to be streamed read into a Stream<List<int>>. Thanks @redsolver.

2.0.13

Updates extension helper getter to use the name property instead of path, since the latest isn't available on the Web, hence, the extension wouldn't be as well. Thank you @markgrancapal.

2.0.12

Android:

  • Fixes an issue that could result in some files not being properly retrieved due to special characters on their names. (#472)
  • Fixes a NPE that could happen with some devices. (#482)

2.0.11

iOS: Fixes FileType.audio exports to support ipod-library content (non DRM protected). From now on, a cached asset (m4a) will be exported from the selected music file in the Music app, so it can later be used. Fixes (#441).

2.0.10

Adds missing extension to name property of PlatformFile. (#444)

2.0.9+1

Minor fix on CHANGELOG regarding version 2.0.9.

2.0.9

Android: Updates package visibility to fully support Android 11 (SDK 30 and later). (#440)

Note: If you have build issues from now on because <queries> aren't recognized, you'll need to update your build.gradle to use one of the following patched versions.

2.0.8+1

  • iOS: Updates media picker to launch in app context (instead of modal).
  • Minor update to README file.

2.0.8

Fixes an issue on iOS 14, where canceling with swipe gestures, could result in cancel event not being dispatched. (#431).

2.0.7

Fixes #425 and updates iOS to use NSDocumentDirectory on iOS 12 or lower. Thanks @allanwolski.

2.0.6

iOS: Fixes iOS 14 media picker (image & video) (#405, #407).

2.0.5

Android: Fixes #402.

2.0.4

Desktop (Go): Fixes directory pick on Linux.

2.0.3

Android: Fixes out of memory issue on some devices when picking big files.

2.0.2+2

Fixes multi-pick example on README.

2.0.2+1

iOS: Fixes conditional import for backwards compatibility with Xcode 11.

2.0.2

Web: Adds mobile Safari support and other minor improvements. iOS: Adds conditional import for backwards compatibility with Xcode 11.

2.0.1+2

iOS: Addresses an issue that could prevent users from viewing picked media elements (pictures/videos) from gallery on iOS 14.

2.0.1+1

Fixes README screenshots.

2.0.1

iOS: Updates picker to use new PHPickerController for both single and multi media (image/video) picks (iOS 14 and above only).

2.0.0

Breaking Changes

  • Unifies all platforms (IO, Web and Desktop) in a single plugin (file_picker) that can be used seamlessly across all. Both file_picker_interface and file_picker_web are no longer mantained from now on.
  • You'll now have to use FilePicker.platform.pickFiles() and extract the files from FilePickerResult;
  • Because platforms are unified and mixing File instances from dart:io and dart:html required stubbing and bloated code, it's no longer available as helper method so you'll have to instanciate a File with the picked paths;

New features

  • Simplified usage, now you only need to use FilePicker.platform.pickFiles() with desired parameters which will return a FilePickerResult with a List<PlatformFile> containing the picked data;
  • Added classes FilePickerResult and PlatformFile classes with helper getters;
  • On Android all picked files are scoped cached which should result in most of files being available. Caching process is only made once, so once done, the picked instance should be the same;
  • On iOS picking audio now supports multiple and cloud picks;
  • Added parameter withData that allows file data to be immediately available on memory as Uint8List (part of PlatformFile instance). This is particularly helpful on web or if you are going to upload to somehwere else;
  • Major refactor with some clean-up and improvements;

Removed

  • Single methods such as getFilePath(), getMultiFilePath(), getFile() and getMultiFile() are no longer availble in favor o pickFiles();

1.13.3

Go: Updates MacOS directory picker to applescript (thank you @trister1997).

1.13.2

Android: fixes picking paths from Downloads directory on versions below Android Q.

1.13.1

Android: adds support to non-legacy picking on Android Q or above (thank you @lakshyab1995).

1.13.0+1

Fixes an issue that could prevent 1.13.0 from being built due to missing allowCompression property.

1.13.0

Adds allowCompression property that will define if media (video & image) files are allowed to be compressed by OS when picked. On Android this has no effect as it already returns the original file or an integral copy.

1.12.0

Adds getDirectoryPath() desktop (go) implementation.

1.11.0+3

Updates tearDown() call order on Android's implementation.

1.11.0+2

Updates README file (iOS preview).

1.11.0+1

Updates README file.

1.11.0

Adds onFileLoading handler for every picking method that will provide picking status: FilePickerStatus.loading and FilePickerStatus.done so you can, for example, display a custom loader.

1.10.0

Adds getDirectoryPath() method that allows you to select and pick directory paths. Android, requires SDK 21 or above for this to work, and iOS requires iOS 11 or above.

1.9.0+1

Adds a temporary workaround on Android where it can trigger onRequestPermissionsResult twice, related to Flutter issue 49365 for anyone affected in Flutter versions below 1.14.6.

1.9.0

Adds clearTemporaryFiles() that allows you to explicitly remove cached files - on Android applies typically to those picked from remote providers, on iOS all picked files are cached.

1.8.0+2

Updates podspec to use only PhotoGallery from DKImagePickerController (thanks @jamesdixon!)

1.8.0+1

Minor fix on getFile() method - should affect only those on 1.8.0.

1.8.0

Adds FileType.media that will allow you to pick video and images at the same time. On iOS, this will let you pick directly from Photos app (gallery), if you want to use Files app, you must use FileType.custom with desired extensions.

1.7.1

Updates iOS multi gallery picker dependency and adds a modal loading while fetching exporting assets.

1.7.0

Breaking change

Added support for multi-picks of videos and photos from Photos app on iOS through DKImagePicker - use any of the getMulti methods with FileType.image or FileType.video. From now on, you'll need to add use_frameworks! in your ios/Podfile.

1.6.3+2

  • Fixes a crash on Android when a file has an id that can't be resolved and uses a name instead (#221);
  • Minor fix on Go (Desktop) - Windows (thanks @marchellodev);

1.6.3+1

Addresses an issue with plugin calls on Go (Desktop) - Linux & Windows

1.6.3

Addresses an issue with plugin calls on Go (Desktop) - MacOS

1.6.2

Updates Go (Desktop) to support multiple extension filters.

1.6.1

Addresses an issue that could result in permission handler resolving requests from other activities.

1.6.0

  • Adds multiple file extension filter support. From now on, you must provide a List of extensions with type FileType.custom when restricting types while picking.
  • Other minor improvements;

1.5.1

  • iOS: Fixes an issue that could result in a crash when selecting files (with repeated taps) from 3rd party remote providers (Google Drive, Dropbox etc.);
  • Go: Updates channel name;
  • Adds check that ensures that you one uses FileType.custom when providing a custom file extension filter;

1.5.0+2

Updates channel name on iOS.

1.5.0+1

Adds temporary workaround for (#49365)(https://github.com/flutter/flutter/issues/49365) until 1.14.6 lands on stable channel.

1.5.0

  • Breaking change: Refactored FileType to match lower camelCase Dart guideline (eg. FileType.ALL now is FileType.any);
  • Added support for new Android plugins APIs (Android V2 embedding);

1.4.3+2

Updates dependencies.

1.4.3+1

Removes checked flutter_export_environment.sh from example app.

1.4.3

Bug fix

  • Fixes an issue that could result in a crash when tapping multiple times in the same media file while picking, on some iOS devices (#171).

1.4.2+1

Updates go-flutter dependencies.

1.4.2

Bug fix

  • Fixes an issue that could cause a crash when picking video files in iOS 13 or above due to SDK changes.
  • Updates Go-Flutter with go 1.13.

1.4.1

Bug fix: Fixes an issue that could result in some cached files, picked from Google Photos (remote file), to have the name set as null.

1.4.0+1

Bug fix: Fixes an issue that could prevent internal storage files from being properly picked.

1.4.0

New features

  • Adds Desktop support throught go-flutter, you can see detailed instructions on how to get in runing here.
  • Adds Desktop example, to run it just do hover init and then hover run within the plugin's example folder (you must have go and hover installed, check the previous point).
  • Similar to getFile, now there is also a getMultiFile which behaves the same way, but returning a list of files instead.

Improvements

  • Updates Android SDK deprecated code.
  • Sometimes when a big file was being picked from a remote directory (GDrive for example), the UI could be blocked. Now this shouldn't happen anymore.

1.3.8

Bug fix: Fixes an issue that could cause a crash when picking files with very long names.

Changes: Updates Android target API to 29.

1.3.7

Rollback - Breaking change: Re-adds runtime verification for external storage read permission. Don't forget to add the permission to the AndroidManifest.xml file as well. More info in the README file.

Bug fix: Fixes a crash that could cause some Android API to crash when multiple files were selected from external storage.

1.3.6

Improvements

  • Removes the Android write permissions requirement.
  • Minor improvements in the example app.
  • Now the exceptions are rethrown in case the user wants to handle them, despite that already being done in the plugin call.

1.3.5

Bug fix: Fixes an issue that could prevent users to pick files from the iCloud Drive app, on versions below iOS 11.

1.3.4+1

Rollback: Removes a local dependency that shouldn't have been committed with 1.3.4 which would cause Android build to fail.

1.3.4

Bug fix: Protects the registrar.activity() in the Android side of being accessed when it's null.

1.3.3

Bug fixes

  • Fixes an issue where sometimes a single file path was being returned as a List instead of String.
  • requestCode in Android intents are now restricted to 16 bits.

1.3.2

Bug fix: Returns a null value in the getFile() when the picker is canceled.

1.3.1

Bug fix: Fixes an issue on Android, where other activity would try to call FilePicker's result object when it shouldn't.

1.3.0

Breaking changes

  • FileType.CAMERA is no longer available, if you need it, you can use this package along with image_picker.

New features

  • You can now pick multiple files by using the getMultiFilePath() method which will return a Map<String,String> with all paths from selected files, where the key matches the file name and the value its path. Optionally, it also supports filtering by file extension, otherwise all files will be selectable. Nevertheless, you should keep using getFilePath() for single path picking.
  • You can now use FileType.AUDIO to pick audio files. In iOS this will let you select from your music library. Paths from DRM protected files won't be loaded (see README for more details).
  • Adds getFile() utility method that does the same of getFilePath() but returns a File object instead, for the returned path.

Bug fixes and updates

  • This package is no longer attached to the image_picker, and because of that, camera permission is also no longer required.
  • Fixes an issue where sometimes the InputStream wasn't being properly closed. Also, its exception is now being forward to the plugin caller.
  • Fixes an issue where the picker, when canceled, wasn't calling the result callback on the underlying platforms.

1.2.0

Breaking change: Migrate from the deprecated original Android Support Library to AndroidX. This shouldn't result in any functional changes, but it requires any Android apps using this plugin to also migrate if they're using the original support library.

1.1.1

  • Updates README file.

1.1.0

Breaking changes

  • FileType.PDF was removed since now it can be used along with custom file types by using the FileType.CUSTOM and providing the file extension (e.g. PDF, SVG, ZIP, etc.).
  • FileType.CAPTURE is now FileType.CAMERA

New features

  • Now it is possible to provide a custom file extension to filter file picking options by using FileType.CUSTOM

Bug fixes and updates

  • Fixes file names from cloud on Android. Previously it would always display Document
  • Fixes an issue on iOS where an exception was being thrown after canceling and re-opening the picker.
  • Fixes an issue where collision could happen with request codes on Android.
  • Adds public documentation to file_picker
  • Example app updated.
  • Updates .gitignore

1.0.3

  • Fixes build.gradle.

1.0.2

  • Minor update of README file.

1.0.1

  • Adds comments for public API

1.0.0

  • Version 1.0 release.
  • Adds support for ANY and VIDEO files.
  • Fixes an issue where permissions were recursively asked on Android.
  • Fixes an issue where some paths from document files couldn't be loaded with Android 8.0.
  • Updates README file to match changes.
  • General refactor & cleanup.

0.1.6

  • Replaces commons dependency with FilePath class on Android, to handle path resolution on different SDK.

0.1.5

  • Minor correction in the README file.

0.1.4

  • Changed Meta minimum version due to versioning conflict with flutter_localization.

0.1.3

  • Updated readme.

0.1.2

  • Changed license from Apache 2.0 to MIT.
  • Adds demo screenshot.

0.1.1

  • Adds license information (Apache 2.0).
  • Adds CHANGELOG details.

0.1.0

  • Initial release.
  • Supports picking paths from files on local storage, cloud.
  • Supports picking paths from both gallery & camera due to image_picker dependency.

Installing

export PUB_HOSTED_URL=https://pub.mirror.p-hatan.com
flutter pub add 'file_picker:13.1.0'
pubspec.yaml
name: file_picker
description: A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.
homepage: https://github.com/vicajilau/flutter_file_picker
repository: https://github.com/vicajilau/flutter_file_picker/tree/main/packages/file_picker
issue_tracker: https://github.com/vicajilau/flutter_file_picker/issues
topics:
  - file-picker
  - files
  - storage
  - desktop
  - web
version: 13.1.0

resolution: workspace

environment:
  sdk: ">=3.10.0 <4.0.0"
  flutter: ">=3.38.0"

dependencies:
  flutter:
    sdk: flutter

  file_picker_platform_interface: ^4.0.0
  android_file_picker: ^2.0.0
  file_picker_darwin: ^2.1.0
  file_picker_linux: ^2.0.0
  windows_file_picker: ^2.0.0
  file_picker_web: ^4.0.0
  cross_file: ^0.3.5+4

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^6.0.0
  plugin_platform_interface: ^2.1.8

flutter:
  plugin:
    platforms:
      android:
        default_package: android_file_picker
      ios:
        default_package: file_picker_darwin
      linux:
        default_package: file_picker_linux
      macos:
        default_package: file_picker_darwin
      web:
        default_package: file_picker_web
      windows:
        default_package: windows_file_picker

Version history

VersionPublishedArchiveSHA-256
0.1.0On demandDownloadeed79a78…5c9bfc
0.1.1On demandDownload63113871…f8d3ab
0.1.2On demandDownloadc209011c…6fd929
0.1.3On demandDownload223de846…3c4165
0.1.4On demandDownload61caae92…d3c5d0
0.1.5On demandDownload7f6b9d65…f56913
0.1.6On demandDownload3fa79a19…5fcd7a
0.2.0On demandDownload1222b11b…92a35e
1.0.0On demandDownload7c5f5329…11fb87
1.0.1On demandDownloadf17deff6…91dbbf
1.0.2On demandDownload052aad40…6b509f
1.0.3On demandDownload4fdcf43e…e51da4
1.1.0On demandDownload3546b11e…464e76
1.1.1On demandDownload60b0cbb7…17dcba
1.2.0On demandDownload50f2fc45…df27a2
1.3.0On demandDownload6649ac7a…89ce43
1.3.1On demandDownload8f7109a8…03f1e1
1.3.2On demandDownloada481fe67…d3f59d
1.3.3On demandDownload9722d3dd…efa46e
1.3.4On demandDownload855a22cf…97fb47
1.3.4+1On demandDownloadce4acf60…507355
1.3.5On demandDownload41c4f4ea…0d829e
1.3.6On demandDownloadb3f63103…ce3f43
1.3.7On demandDownload8d46bcd8…fda3a9
1.3.8On demandDownload47c19fd6…0f5213
1.4.0On demandDownload4795d19a…fe5be2
1.4.0+1On demandDownloadb064d442…230e1e
1.4.1On demandDownload8efbd12f…7457c7
1.4.2On demandDownload6e38db45…bc431b
1.4.2+1On demandDownload4399d9f3…6b559e
1.4.3On demandDownload9155ed89…b47324
1.4.3+1On demandDownload44a502d2…8cad6f
1.4.3+2On demandDownload388654ce…e322fb
1.5.0On demandDownload563971b4…502445
1.5.0+1On demandDownloadf92b3d25…24a78a
1.5.0+2On demandDownload4f621107…c5b866
1.5.1On demandDownload70ef2a35…b0ca63
1.6.0On demandDownloadc1ca8c96…032ff1
1.6.1On demandDownload4ea5f031…5e30f2
1.6.2On demandDownload7666d1c9…d96326
1.6.3On demandDownload5bd865f6…1fdf87
1.6.3+1On demandDownload943f2148…831ec7
1.6.3+2On demandDownload842c5955…eafd01
1.7.0On demandDownload606f1e7d…d28c75
1.7.1On demandDownloadc8f84e31…7dc41b
1.8.0On demandDownloada49700c7…7a4459
1.8.0+1On demandDownloadbb59a26b…45d74c
1.8.0+2On demandDownload98bffeb5…f696a4
1.9.0On demandDownload5f6a21d2…961aa4
1.9.0+1On demandDownload9559c63a…aa759e
1.10.0On demandDownloade73083ba…12af66
1.11.0On demandDownloadaa7f986d…9c215a
1.11.0+1On demandDownload94eba01d…73cc7b
1.11.0+2On demandDownload132d0c5c…940068
1.11.0+3On demandDownload6a1263aa…585129
1.12.0On demandDownload711e9bcb…2ae02d
1.13.0On demandDownload70dc981c…0e9c30
1.13.0+1On demandDownloade10dfd7c…e0c21d
1.13.1On demandDownload72e06372…fb4a44
1.13.2On demandDownload87ce24c6…e23bbf
1.13.3On demandDownload5df80d10…8869ea
2.0.0On demandDownload9139f3f9…cbfaad
2.0.1On demandDownload0dcf22aa…535f42
2.0.1+1On demandDownloadfe2734dc…669a0a
2.0.1+2On demandDownloada00335c5…09079e
2.0.2On demandDownload723ed0f6…40bd7c
2.0.2+1On demandDownload703ae082…8c6c0e
2.0.2+2On demandDownload48996238…0e38b0
2.0.3On demandDownloadb82e1860…2bb471
2.0.4On demandDownloada4375869…110bab
2.0.5On demandDownloadd46b74e1…25b541
2.0.6On demandDownloadd663012c…28b541
2.0.7On demandDownload214f7df1…50d699
2.0.8On demandDownloade62cf3c7…89162d
2.0.8+1On demandDownload6e0a34db…a1fe8f
2.0.9On demandDownloada33d46c3…f8d2c8
2.0.9+1On demandDownloadf050281b…f0a65e
2.0.10On demandDownloaddf899535…8150d0
2.0.11On demandDownload65883622…148956
2.0.12On demandDownloadbde58833…76a58d
2.0.13On demandDownload774e4276…ac996d
2.1.0On demandDownloadfaa6a65b…0f047b
2.1.1On demandDownload30338531…c0bd20
2.1.2On demandDownload6b206f86…f2dc2b
2.1.3On demandDownload041ff5b4…6550bb
2.1.4On demandDownload12e0696e…83c6cb
2.1.5On demandDownload810832e9…77f72b
2.1.5+1On demandDownloade891a035…b07e06
2.1.6On demandDownloadbb9cba16…355e92
2.1.7On demandDownloadfba13a36…0b5730
3.0.0-nullsafety.0On demandDownload67f08780…139754
3.0.0-nullsafety.1On demandDownload8eeb1e9f…0f1810
3.0.0-nullsafety.2On demandDownload4252943e…b385c7
3.0.0-nullsafety.3On demandDownloada8982988…383fef
3.0.0-nullsafety.4On demandDownloadae4d81e2…3fde5e
3.0.0On demandDownloadc91c6179…d05f93
3.0.1On demandDownload1081616a…0f79fb
3.0.2On demandDownloadf2361ac4…7c66b6
3.0.2+1On demandDownload19825234…3d691b
3.0.2+2On demandDownload79160736…09c3eb
3.0.3On demandDownloadffa4d7f6…d3f08d
3.0.4On demandDownloadf9245fc3…99e391
4.0.0On demandDownloadcb66bc07…ae6936
4.0.1On demandDownloadb4841555…9a80b2
4.0.2On demandDownload9f3d5e09…3a725c
4.0.3On demandDownload29c6a5d6…d10dca
4.1.0On demandDownloadd7393bed…ab5ad6
4.1.1On demandDownload73f77e1e…82bd21
4.1.2On demandDownload047b15c6…688c3a
4.1.3On demandDownloadea235fe9…0c60e0
4.1.4On demandDownloadb6ecd4e9…f23a5d
4.1.5On demandDownloadb1cc14db…b848e8
4.1.6On demandDownload21d7090b…9334a2
4.2.0On demandDownloadab69294a…90cb74
4.2.1On demandDownload93a7dc52…e15626
4.2.2On demandDownloadbd6e0ba5…faecbb
4.2.2+1On demandDownloade0871fda…1c6dcd
4.2.3On demandDownload623580f6…3eba17
4.2.4On demandDownload1e7ef64c…e2202d
4.2.5On demandDownloadbca09a03…05ea51
4.2.6On demandDownload809b5989…ddfce7
4.2.7On demandDownload328cf99b…a90726
4.2.8On demandDownload2b48ea8f…1d5f3e
4.3.0On demandDownloadc19c6d8b…47e0c8
4.3.1On demandDownload104d2ac9…fb3ec8
4.3.2On demandDownloadf9eafe27…115576
4.3.3On demandDownload2a9640a2…c0331d
4.4.0On demandDownloadcfb5cfbf…b4c8a2
4.5.0On demandDownloadb1cbe838…b62845
4.5.1On demandDownload06375c73…8f8968
4.6.0On demandDownload89fed0e0…64d3fd
4.6.1On demandDownload70425966…47035f
5.0.0On demandDownloadaeeb811e…9fb2a4
5.0.1On demandDownloadc448221d…8f5f1d
5.1.0On demandDownloadd6f105f0…640bf6
5.2.0On demandDownload9d707b7c…a25e5e
5.2.0+1On demandDownload39cfee7e…24677c
5.2.1On demandDownload686efb9e…27f1c2
5.2.2On demandDownloadc24465c1…373fe3
5.2.3On demandDownload28f1c956…7e7fef
5.2.4On demandDownloadecf52f97…23d7ef
5.2.5On demandDownloadd090ae03…9542b9
5.2.6On demandDownloadd8e9ca7e…033013
5.2.7On demandDownload0d923fb6…bc788f
5.2.8On demandDownloaddd328189…704489
5.2.9On demandDownloaddcde5ad1…8ade62
5.2.10On demandDownloadb85eb92b…e763ff
5.2.11On demandDownloade6c7ad8e…f8e798
5.3.0On demandDownloadc7a8e25c…ffc877
5.3.1On demandDownload9d6e95ec…165daf
5.3.2On demandDownloadb1729fc9…f66432
5.3.3On demandDownload21145c9c…819e0a
5.3.4On demandDownloadbdfa035a…97bedc
5.5.0On demandDownloadbe325344…42e030
6.0.0On demandDownload903dd4ba…489620
6.1.1On demandDownload4e42aacd…6954a6
6.2.0On demandDownloadcaa6bc22…1a04f6
6.2.1On demandDownload1bbf65dd…81d4e4
7.0.2On demandDownloadfa6e189a…654ddd
7.1.0On demandDownloade167d2d1…03b92e
7.1.0+1On demandDownloada7965f87…b1f8bf
8.0.0On demandDownload04a7b858…b3251a
8.0.0+1On demandDownloadd1d0ac39…27bd03
8.0.1On demandDownloadb6283d73…9a1476
8.0.2On demandDownload45c70b43…cf55cd
8.0.3On demandDownload29c90806…45b10a
8.0.4On demandDownloada7eed971…07cf4f
8.0.5On demandDownload2ca05198…8c3d45
8.0.6On demandDownload824f5b9f…47d258
8.0.7On demandDownload825aec67…7384f3
8.1.0On demandDownloade5ab74a1…55d3dd
8.1.1On demandDownload1375f868…55cdcd
8.1.2On demandDownload167bb619…54bf12
8.1.3On demandDownloadaac85f20…39b877
8.1.4On demandDownload16dc141d…f1465c
8.1.5On demandDownload89500471…ced1de
8.1.6On demandDownloadc2376a6a…a8bd3b
8.1.7On demandDownloadc904b4ab…3cf204
8.2.0On demandDownload3ddd0838…1fcf7d
8.3.0On demandDownloadc3756004…89349c
8.3.1On demandDownloadc9943dd7…4d2adc
8.3.2On demandDownloadcacfdc5a…968fba
8.3.3On demandDownload8d8f1264…99e1b5
8.3.4On demandDownload481ecc16…4a28f6
8.3.5On demandDownload3d57312a…ce4921
8.3.6On demandDownloadd3d4ae62…37a46e
8.3.7On demandDownloadab13ae8e…8a8810
9.0.0On demandDownload6f6bfa87…fe594c
9.0.1On demandDownload9467b7c4…03c111
9.0.2On demandDownload7423298f…27995d
9.0.3On demandDownload2458a41b…13db9c
9.1.0On demandDownloadee11ce89…bcdf0a
9.2.0On demandDownload127d84b9…212a4b
9.2.1On demandDownload8d938fd5…d8a25b
9.2.2On demandDownload6a8720a6…1eea7f
9.2.3On demandDownload09b474c0…754694
10.0.0On demandDownload36a1652d…436ef7
10.1.0On demandDownload3dc3f332…386f98
10.1.1On demandDownload5d7966f0…8237b3
10.1.2On demandDownload8986dec4…f9467f
10.1.3On demandDownload937c706c…cc2f5a
10.1.4On demandDownloadb4303b48…c0469d
10.1.5On demandDownload978be1f6…406a17
10.1.6On demandDownload182fb2ed…0ce5d2
10.1.7On demandDownloada222f231…ce0b24
10.1.8On demandDownloaddd51fd20…b838e6
10.1.9On demandDownload77f8e81d…167964
10.2.0On demandDownloadef990873…37db0a
10.2.1On demandDownload13ba4e62…9b4aa8
10.2.2On demandDownload97a94352…b86875
10.2.3On demandDownload8f9f4299…c429b9
10.2.4On demandDownload970d33d7…5b2d9a
10.3.0On demandDownload76529fba…c121f3
10.3.1On demandDownloadef7d2a08…ddf8e2
10.3.2On demandDownloade7e16c9d…452f22
10.3.3On demandDownloadf2d9f173…86a06f
10.3.6Cached · Upstream SHA-256 matchedDownloadf8f4ea43…754967
10.3.7On demandDownload78725457…8f2200
10.3.8On demandDownloadd974b6ba…a85fde
10.3.9On demandDownloadb9c6bbfe…ca876f
10.3.10On demandDownload57d9a1dd…fc7343
10.3.11On demandDownload67f7e688…2027a8
11.0.0On demandDownload27c58ff4…71b27b
11.0.1On demandDownload84fd4edc…c9ede6
11.0.2On demandDownloadf13a0300…348387
11.0.3On demandDownload29cc1fdb…30847e
12.0.0-beta.1On demandDownload1d4afa26…d5b6e1
12.0.0-beta.2On demandDownload5813e430…5dd918
12.0.0-beta.3On demandDownload51093fc4…32b26a
12.0.0-beta.4On demandDownload02046956…2a5f46
12.0.0-beta.5On demandDownloadfc83774c…32c934
12.0.0-beta.6On demandDownload852adb09…d50941
12.0.0-beta.7On demandDownloadfdc6a37f…ab76be
12.0.0On demandDownloadafbaa801…66b46d
12.1.0On demandDownload80f3ebee…726dc7
12.1.1On demandDownload70e04f5e…9f608c
12.1.2On demandDownloadb7acb5d1…ece9c8
12.1.3On demandDownload3c5191df…4161f5
12.2.0On demandDownload0631f51b…3f4d24
12.3.0On demandDownload9be6aac7…cc0110
13.0.0On demandDownload1fb0cb9d…26977e
13.1.0Cached · Upstream SHA-256 matchedDownload98c0b156…005bea
13.2.0On demandDownloadf201f3cb…a25581
13.3.0On demandDownloade67f1bcb…eee8be

Dependencies

android_file_picker "^2.0.0"

cross_file "^0.3.5+4"

file_picker_darwin "^2.1.0"

file_picker_linux "^2.0.0"

file_picker_platform_interface "^4.0.0"

file_picker_web "^4.0.0"

flutter { "sdk": "flutter" }

windows_file_picker "^2.0.0"