flutter_file_picker
A Flutter plugin that lets you use the native file explorer to pick single or multiple files, with extension filtering, directory selection, and save-file dialogs, across Android, iOS, Linux, macOS, Windows, and Web.
This repository is a Melos workspace hosting file_picker as a federated plugin: a single cross-platform API package on top of one implementation package per platform, all versioned and published independently.
Packages
| Package | Pub | Description |
|---|---|---|
file_picker |
The main package. Add this to your app, it pulls in the right platform implementation automatically. | |
file_picker_platform_interface |
The shared interface and data contracts (PlatformFile, FileType, platform option classes) every implementation builds on. |
|
file_picker_darwin |
iOS and macOS implementation. | |
android_file_picker |
Android implementation, including Storage Access Framework (SAF) support. | |
file_picker_linux |
Linux implementation, using GTK3 and XDG Desktop Portals. | |
windows_file_picker |
Windows implementation, using the Win32 COM APIs. | |
file_picker_web |
Web implementation, including Wasm compilation support. |
Almost all apps should only ever depend on file_picker directly. The platform packages are pulled in transitively and registered automatically by Flutter's plugin system; you only reach for one of them directly if you need a platform-specific API that isn't exposed on the shared facade (for example FilePickerDarwin.skipEntitlementsChecks() on macOS).
Quick start
dependencies:
file_picker: ^12.0.0
import 'package:file_picker/file_picker.dart';
final file = await FilePicker.pickFile();
if (file != null) {
print(file.name);
print(await file.length());
}
See packages/file_picker/README.md for the full feature list, platform compatibility chart, and more usage examples (multiple files, extension filters, directory picking, save-file dialogs).
Documentation
- File Picker Wiki — installation, setup, and usage guides.
- API reference on pub.dev.
packages/file_picker/CHANGELOG.mdand each platform package's ownCHANGELOG.mdfor release notes.
Contributing
Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request, it covers testing requirements, versioning, and changelog conventions for this workspace.
To work on this repository locally:
dart pub global activate melos
melos bootstrap
melos run analyze # flutter analyze across every package
melos run test # flutter test across every package
Each package keeps its own pubspec.yaml and CHANGELOG.md and is released independently, only the package(s) you actually changed need a version bump.
License
MIT, see LICENSE. Every package in this repository is released under the same license.
