file_manager

Creator: coderz1093

Last updated:

Add to Cart

Description:

file manager

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)
❌   MacOS (active issue: MacOS 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
copied to clipboard
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.
<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"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

...
</manifest>
copied to clipboard
also add for Android 10
<application
android:requestLegacyExternalStorage="true"
.../>
copied to clipboard
You also need Runtime Request Permission
allow storage permission from app setting manually or you may use any package such as permission_handler.
or use FileManager to request permission at runtime.
// request permission
await controller.requestFilesAccessPermission();

or

await FileManager.requestFilesAccessPermission();
copied to clipboard

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();
copied to clipboard

builder This function allows you to create custom widgets and retrieve a list of entities List<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.
}
},
),
);
},
);
},
),
copied to clipboard

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:-
// Wrap Scaffold containing FileManage with ControlBackButton
ControlBackButton(
controller: controller
child: Scaffold(
appBar: AppBar(...)
body: FileManager(
...
)
)
)
copied to clipboard
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.











Show some ❤️ and ⭐ the repo #



Project Created & Maintained By #


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 doesn'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 https://pub.dev.


A hook will not be merged unless fully tested, to avoid breaking it inadvertently
in the future.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.