A wonderful widget that allows you to manage files and folders with flutter
File Manager
FileManager is a wonderful widget that allows you to manage files and folders, pick files and folders, and do a lot more. Designed to feel like part of the Flutter framework.
Compatibility
✅ Android
✅ Linux
❌ Windows (in progress)
❌ Web
❌ MacOS (active issue: MacOS support)
❌ iOS (active issue: iOS support)
Usage
Make sure to check out examples for more details.
Installation
Dependencies Add the following line to pubspec.yaml
:
dependencies:
file_manager: ^1.0.0
Give storage permission to application
Android: Beside needing to add WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE to your android/app/src/main/AndroidManifest.xml.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.yyy">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
...
</manifest>
also add for Android 10
<application
android:requestLegacyExternalStorage="true"
...
You also need Runtime Request Permission
allow storage permission from app setting manually or you may use any package such as permission_handler
.
Basic setup
The complete example is available here.
Required parameter for FileManager are controller
and builder
controller
The controller updates value and notifies its listeners, and FileManager updates itself appropriately whenever the user modifies the path or changes the sort-type with an associated FileManagerController.
final FileManagerController controller = FileManagerController();
builder
This function allows you to create custom widgets and retrieve a list of entitiesList<FileSystemEntity>.
Sample code
FileManager(
controller: controller,
builder: (context, snapshot) {
final List<FileSystemEntity> entities = snapshot;
return ListView.builder(
itemCount: entities.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
leading: FileManager.isFile(entities[index])
? Icon(Icons.feed_outlined)
: Icon(Icons.folder),
title: Text(FileManager.basename(entities[index])),
onTap: () {
if (FileManager.isDirectory(entities[index])) {
controller.openDirectory(entities[index]); // open directory
} else {
// Perform file-related tasks.
}
},
),
);
},
);
},
),
FileManager
Properties | Description |
---|---|
loadingScreen |
For the loading screen, create a custom widget. A simple Centered CircularProgressIndicator is provided by default. |
emptyFolder |
For an empty screen, create a custom widget. |
controller |
For an empty screen, create a custom widget. |
hideHiddenEntity |
Hide the files and folders that are hidden. |
builder |
This function allows you to create custom widgets and retrieve a list of entities List<FileSystemEntity>. |
FileManagerContoller
Properties | Description |
---|---|
getSortedBy |
The sorting type that is currently in use is returned. |
setSortedBy |
is used to set the sorting type. SortBy{ name, type, date, size } . |
getCurrentDirectory |
Get current Directory |
getCurrentPath |
Get current path, similar to [getCurrentDirectory]. |
setCurrentPath |
Set current directory path by providing String of path, similar to [openDirectory]. List<FileSystemEntity>. |
isRootDirectory |
return true if current directory is the root. false, if the current directory not on root of the stogare. |
goToParentDirectory |
Jumps to the parent directory of currently opened directory if the parent is accessible. |
openDirectory |
Open directory by providing Directory . |
titleNotifier |
ValueNotifier of the current directory's basename |
Others
Properties | Description |
---|---|
isFile |
check weather FileSystemEntity is File. |
isDirectory |
check weather FileSystemEntity is Directory. |
basename |
Get the basename of Directory or File. Provide File , Directory or FileSystemEntity and returns the name as a String . If you want to hide the extension of a file, you may use optional parameter showFileExtension . ie controller.dirName(dir, true) |
formatBytes |
Convert bytes to human readable size.[getCurrentDirectory]. |
setCurrentPath |
Set current directory path by providing String of path, similar to [openDirectory]. List<FileSystemEntity>. |
getStorageList |
Get list of available storage in the device, returns an empty list if there is no storage List<Directory> |
createFolder |
Creates the directory if it doesn't exist. Requires currentPath and Name of the Directory. |