NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #176 most downloaded on pub.dev
A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.
Last release 23 days ago
15 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
8 years old
242 releases · first in 2018
The CHANGELOG already listed a 13.1.0 entry for the UIScene support added in #2214 , but the package version was left at 13.0.0, which was already pub
The CHANGELOG already listed a 13.1.0 entry for the UIScene support added in #2214, but the package version was left at 13.0.0, which was already published.
BREAKING CHANGE: PlatformFile.length() now returns Future instead of Future , matching lengthSync(). null means the length could not be determined (e.…
One column per quarter.
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. #2197allowMultiple 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. #2202file_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.FilePickerWebOptions.readSequential having no effect (file_picker_web 4.0.0). #2206withData (android_file_picker 2.0.0, file_picker_darwin 2.0.0). #2202Each platform package (android_file_picker, file_picker_darwin, file_picker_linux, windows_file_picker, file_picker_web) had no banner at all. Added o
Each platform package (android_file_picker, file_picker_darwin,
file_picker_linux, windows_file_picker, file_picker_web) had no banner at
all. Added one for each, reusing the root banner's style (gradient, floating
file cards, title) with a platform specific subtitle, a single platform pill
instead of the six way row, and a translucent watermark icon.
The Android, Apple, Tux and Chrome watermarks are traced from the official
marks rather than approximated by hand:
Windows uses a generic four pane grid instead of the Microsoft flag.
WindowsOptions.acceptLabel, letting callers set the confirm ("OK") button text on pickFile(), pickFiles(), getDirectoryPath(), and saveFile() dialogs. #1861DarwinOptions.acceptLabel, letting callers set the confirm button text for pickFile()/pickFiles() (NSOpenPanel.prompt). Has no effect on iOS. #1861melos list returns packages alphabetically, so prepare would tag android_file_picker before the platform interface it depends on. Each tag starts its
melos list returns packages alphabetically, so prepare would tag
android_file_picker before the platform interface it depends on. Each
tag starts its own independent publish run, so that package would reach
pub.dev asking for an interface version that is not published yet.
melos publish sorts by the dependency graph internally, which is why
the dry run always looked right, but the tagging never did. It now takes
the order from melos list --graph and only tags a package once
everything it depends on has been tagged.
On the release this repository is about to cut, that turns
android_file_picker, file_picker, file_picker_darwin, file_picker_linux,
file_picker_platform_interface, file_picker_web, windows_file_picker
into
file_picker_platform_interface, android_file_picker, file_picker_darwin,
file_picker_linux, windows_file_picker, file_picker_web, file_picker
which is the order melos publishes in.
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. #2187PlatformFile.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.Merge pull request #2188 from miguelpruivo/fix/facade-implementation-…
Merge pull request #2188 from miguelpruivo/fix/facade-implementation-…
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. #2186Merge pull request #2182 from miguelpruivo/docs/darwin-asset-represen…
Merge pull request #2182 from miguelpruivo/docs/darwin-asset-represen…
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.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.Merge pull request #2171 from miguelpruivo/fix/file-picker-version-af…
Merge pull request #2171 from miguelpruivo/fix/file-picker-version-af…
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.Merge pull request #2168 from miguelpruivo/fix/publish-workflow-oidc-…
Merge pull request #2168 from miguelpruivo/fix/publish-workflow-oidc-…
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.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.Running dart format . in the repository by @vicajilau in #1982
dart format . in the repository by @vicajilau in #1982FilePickerDelegate by @daniJimen in #2071ffi, win32, and flutter_lints dependencies by @daniJimen in #2072PlatformFile.xFile getter on web when bytes are null by @daniJimen in #2075IllegalCharacterInFileNameException Fixes #2076 by @hasanmhallak in #2077Full Changelog: v11.0.2...v12.0.0
3.38 / Dart 3.10.14.0. Removed DKImagePickerController / DKPhotoGallery dependency chain.saveFile(): fileName and bytes are now required parameters across all platforms.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).withData, withReadStream, and readSequential on pickFiles()/pickFile() in favor of PlatformFile.readAsBytes() and PlatformFile.readAsByteStream().lockParentWindow and cancelUploadOnWindowBlur parameters in favor of platform-specific option classes (WindowsOptions, LinuxOptions, WebOptions).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).pickFile() static method as a convenience wrapper for single file selection.WindowsOptions, LinuxOptions (with acceptLabel and parentWindow), and WebOptions.AndroidSAFOptions, AndroidSAFHandle, AndroidPlatformFile). Optimized image compression to prevent OutOfMemoryError.IllegalCharacterInFileNameException in file_picker.dart.Merge pull request #2075 from daniJimen/feature/fix_web_issue_with_xfile
Merge pull request #2075 from daniJimen/feature/fix_web_issue_with_xfile
[WEB] - Fix `PlatformFile.xFile` getter on web when bytes are null
XFile.fromData is only used on the web if bytes is not null, preventing potential null check errors.Export 'src/platform/file_picker_platform_interface.dart' by @zmuranaka in #2064
FilePickerDelegate by @daniJimen in #2071ffi, win32, and flutter_lints dependencies by @daniJimen in #2072Full Changelog: v12.0.0-beta.5...v12.0.0-beta.6
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.ffi, win32, and flutter_lints dependencies have been updated.Fix saveFile bytes handling on Android and iOS by @vicajilau in #2038
Full Changelog: v12.0.0-beta.4...v12.0.0-beta.5
saveFile now writes file data using Kotlin Coroutines (CoroutineScope(Dispatchers.IO).launch), keeping all I/O off the main thread and preventing UI freezes.multiple_request state until app restart. #2021saveFile now performs file writing on a background thread (DispatchQueue.global), preventing UI freezes when saving large files.PlatformFile.readAsBytes() so files picked on Web can recover data from blob: and data: URLs when withData was not used.blob:/data: URLs: when the ReadableStream API is supported.fix(android): fix FileType.any subdirectory visibility by @vicajilau in #2016
Full Changelog: v12.0.0-beta.3...v12.0.0-beta.4
pickFile() static method as a convenience wrapper for single file selection, returning PlatformFile? directly. #1469saveFile() to make fileName and bytes required parameters across all platforms for a more consistent API. Improved the method's documentation for better clarity.PlatformFile properties (path, bytes, readStream) to clarify nullability and usage across platforms. #1469allowMultiple parameter on pickFiles() now defaults to true. Use pickFile() for single-file selection. (allowMultiple is deprecated and will be removed in a future release.)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.PlatformFile.toString() output to display byte length instead of full content.FileType.any would prevent subdirectories from being listed in the system file explorer by ensuring EXTRA_MIME_TYPES is correctly passed as an array. #20138.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.build.gradle.kts, settings.gradle.kts).FlutterFramework dependency to Package.swift for Swift Package Manager (SPM) compatibility.fix(android): support AGP 9+ and android.builtInKotlin property for plugin registration ( #2002 ) by @daniJimen in #2010
Full Changelog: v12.0.0-beta.2...v12.0.0-beta.3
onFileLoading callback to saveFile and implemented status tracking via an event channel. saveFile now reports loading status (for example FilePickerStatus.loading and FilePickerStatus.done).finally block to prevent leaks and spurious events.android.builtInKotlin=false, while preserving support for older AGP setups.fix(android): handle OutOfMemoryError gracefully on large withData selections ( #1997 ) by @vicajilau in #2001
Full Changelog: v12.0.0-beta.1...v12.0.0-beta.2
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.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. #2004Running dart format . in the repository by @vicajilau in #1982
dart format . in the repository by @vicajilau in #1982Full Changelog: v11.0.2...v12.0.0-beta.1
win32 dependency to 6.0.0 and updated the Windows file picker implementation to match the new Win32/COM APIs. #1980AndroidSAFOptions and AndroidSAFHandle to configure and manage persistent permissions.AndroidPlatformFile as a subclass of PlatformFile to encapsulate SAF-specific metadata.8.7 to ensure compatibility with Android Gradle Plugin (AGP) 8.5.1.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)). #1947pickFiles() default withData behavior in the public API to correctly default to true on web when not explicitly provided. #1987Tika added ~300 KB to the Android binary just to detect a MIME type in saveFile(). MIME types are now resolved from the file name extension via MimeTy
Tika added ~300 KB to the Android binary just to detect a MIME type in
saveFile(). MIME types are now resolved from the file name extension
via MimeTypeMap, with URLConnection.guessContentTypeFromStream as a
content-sniffing fallback when no usable extension is available.
Fixes #2101
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. #2101fix(android): mitigate CWE-22 path traversal vulnerability in FileUtils by @vicajilau in #1979
Full Changelog: v11.0.1...v11.0.2
Fixed backward compatibility with Android Gradle Plugin (AGP) versions below 9.0. #1973
BREAKING CHANGE: Refactored FilePicker class to use static methods instead of an instance-based approach. Users should now call FilePicker.pickFiles()…
FilePicker class to use static methods instead of an instance-based approach. Users should now call FilePicker.pickFiles(), FilePicker.getDirectoryPath(), and FilePicker.saveFile() directly.cancelUploadOnWindowBlur to the public pickFiles API (Web only). #1961file_picker.dart.audio, video, media) was not being considered correctly on Android. #1959skipEntitlementsChecks(), to allow users to bypass entitlements checks on macOS when using the plugin without Sandbox enabled. #1845Fixed a crash when initialDirectory contains special characters #1963
Updated Tika library to resolve vulnerability CVE-2025-66516 and CVE-2025-54988 (Critical XXE vulnerability).
Updated Apache Tika to 3.2.3 to address CVE-2025-66516 and CVE-2025-54988 (Critical XXE vulnerability).
Rename FileUtils to FilePickerUtils #1921
Fixed an issue where file type filtering was not being applied correctly, now only displaying files that match the selected MIME types. #1906
Added support for 16 KB page sizes. #1888
Updated compileSdk to use flutter.compileSdkVersion. #1842
Fixed an issue filtering files by extension on Linux. #1870 @Decodetalkers
Fixed onFileLoading handler to process status changes only when data is a bool.
Support xdg desktop portal filechooser on linux. #1827 @Decodetalkers
Fixed an issue where custom MIME types were failing to load picking files on Chromebook. #1858 @vicajilau
Fixed build failures on Flutter 3.24 caused by changes to address Win32 deprecation warnings on Windows. #1855 @vicajilau
Fixed an issue where some files would incorrectly append a .txt extension when saving files on Android. @vicajilau
.txt extension when saving files on Android. @vicajilauFixed an issue where the image upload would not display the loading indicator.
Fixed an issue when a folder is selected on an external storage #1801
Fixed an issue when a folder is selected #1802
Fixed a memory leak on the web.
Fixed an issue when you try to select more than one file#1796
Fixed an app crash when calling .saveFile twice and cancelling the native save operation via the UI #1626 @Leapward-Koex
.saveFile twice and cancelling the native save operation via the UI #1626 @Leapward-Koex.saveFile future never completing when .saveFile is called twice without waiting for the first completion. @Leapward-KoexFixed an issue where paths were loaded with duplicated endings. #1767
Fixed an issue loading files. #1777
Improved mimetype detection. @vicajilau
Migrated Android code base from Java to Kotlin.
compressionQuality on iOS was not loaded properly. #1761Introduced a new method, pickFileAndDirectoryPaths(), which displays a dialog enabling users to select both files and directories simultaneously. The
pickFileAndDirectoryPaths(), which displays a dialog enabling users to select both files and directories simultaneously. The method returns their absolute paths. Only available for macOS.BREAKING CHANGE: The compressionQuality property in the pickFiles method now defaults to 0.
compressionQuality property in the pickFiles method now defaults to 0.allowCompression property has been deprecated in favor of compressionQuality, and now defaults to false.compressionQuality is not 0. (#1742). @vicajilauFixed an issue when the active viewController is not a FlutterViewController.
Updated the file picker to check for missing entitlements, instead of failing silently. @vicajilau.
Present file picker panel as a sheet modal to the Flutter application window. #1734
Fixes an inconsistency for saveFile that did not save the file, when bytes are provided on desktop platforms. @vicajilau.
Added an implementation for saveFile() on the web. @vicajilau.
saveFile() on the web. @vicajilau.Added ProGuard consumer rules to automatically exclude androidx.lifecycle.DefaultLifecycleObserver from obfuscation.
androidx.lifecycle.DefaultLifecycleObserver from obfuscation.Fixes: File streams not getting closed.
Move getDirectoryPath() to its own isolate to avoid COM initialization conflicts with other plugins #1713 @tguerin.
BREAKING CHANGE: pickFiles() now loads files as blobs. See the note in the updated wiki
pickFiles() now loads files as blobs. See the note in the updated wikiUpdated example project Android sources. @vicajilau
Added compatibility with Flutter 3.29. @vicajilau.
CoInitializeEx and the File Explorer windows doesn't popup. #1708Fixes allowCompression not working on Android. 1633
Fix: Handle Null Byte Array in saveFile Method #1662 @vicajilau.
Updates flutter_plugin_android_lifecycle, ffi, path, win32, cross_file and web dependencies @vicajilau.
Your coding agent can read these notes before it upgrades. Set up the MCP server →