# 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](https://github.com/4-alok/file_manager/tree/windows-support))
❌ Web
❌ MacOS (active issue: [MacOS support](https://github.com/DevsOnFlutter/file_manager/issues/8))
❌ iOS (active issue: [iOS support](https://github.com/DevsOnFlutter/file_manager/issues/7))
## Usage
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** and **READ_EXTERNAL_STORAGE** to your android/app/src/main/AndroidManifest.xml.
```xml
...
```
also add for Android 10
```xml
### 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.
```dart
final FileManagerController controller = FileManagerController();
```
* `builder` This function allows you to create custom widgets and retrieve a list of entities `List.`
## Sample code
```dart
FileManager(
controller: controller,
builder: (context, snapshot) {
final List entities = snapshot;
return ListView.builder(
itemCount: entities.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
leading: isFile(entities[index])
? Icon(Icons.feed_outlined)
: Icon(Icons.folder),
title: Text(basename(entities[index])),
onTap: () {
if (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.` |
## 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.` |
| `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`. |
## 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.` |
| `getStorageList` | Get list of available storage in the device, returns an empty list if there is no storage `List`|
## Show some :heart: and :star: the repo
## Project Created & Maintained By
### [DevsOnFlutter](https://github.com/DevsOnFlutter)
## Contributions
Contributions are welcomed!
If you feel that a hook is missing, feel free to open a pull-request.
For a custom-hook to be merged, you will need to do the following:
* Describe the use-case.
* Open an issue explaining why we need this hook, how to use it, ...
This is important as a hook will not get merged if the hook doens't appeal to
a large number of people.
* If your hook is rejected, don't worry! A rejection doesn't mean that it won't
be merged later in the future if more people shows an interest in it.
In the mean-time, feel free to publish your hook as a package on .
* A hook will not be merged unles fully tested, to avoid breaking it inadvertendly
in the future.