
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 </br>
✅ Linux </br>
✅ Aurora </br>
❌ Windows ([in progress](https://github.com/4-alok/file_manager/tree/windows-support))</br>
Make sure to check out [examples](https://github.com/DevsOnFlutter/file_manager/blob/main/example/lib/main.dart) for more details.
### Installation
**Dependencies** Add the following line to `pubspec.yaml`:
```yaml
dependencies:
file_manager:^1.0.0
```
### Give storage permission to application
## Android
Beside needing to add **WRITE_EXTERNAL_STORAGE** , **READ_EXTERNAL_STORAGE** and **MANAGE_EXTERNAL_STORAGE** to your android/app/src/main/AndroidManifest.xml.
allow storage permission from app setting manually or you may use any package such as [`permission_handler`](https://pub.dev/packages/permission_handler).
or use `FileManager` to request permission at runtime.
```dart
// request permission
awaitcontroller.requestFilesAccessPermission();
or
awaitFileManager.requestFilesAccessPermission();
```
</hr>
### Basic setup
*The complete example is available [here](https://github.com/DevsOnFlutter/file_manager/blob/main/example/lib/main.dart).*
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.
controller.openDirectory(entities[index]);// open directory
}else{
// Perform file-related tasks.
}
},
),
);
},
);
},
),
```
</hr>
## 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>.` |
## FileManagerController
| Properties | Description |
|--------------|-----------------|
| `getSortedBy` | The sorting type that is currently in use is returned. |
| `setSortBy` | is used to set the sorting type. `SortBy{ name, type, date, size }`. ie: `controller.sortBy(SortBy.date)` |
| `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 storage. |
| `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 |
## ControlBackButton
When the current directory is not root, this widget registers a callback to prevent the user from dismissing the window, or controllers the system's back button
ie:-
```dart
// Wrap Scaffold containing FileManage with ControlBackButton
ControlBackButton(
controller:controller
child:Scaffold(
appBar:AppBar(...)
body:FileManager(
...
)
)
)
```
## 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>.` |
| `getFileExtension` | Return file extension as String. ie:- `File("/../image.png")` to `"png"`. |
| `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. |