Skip to content

Repository files navigation

File Manager

FileManager-Banner

GitHubGitHub code size in bytesGitHub top languageGitHub language countGitHub tag (latest by date)GitHub issues

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

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.

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.xxx.yyy">
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
...
</manifest>

also add for Android 10

 <applicationandroid: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.

or use FileManager to request permission at runtime.

// request permissionawaitFileManager.requestFilesAccessPermission();

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.
finalFileManagerController controller =FileManagerController();
  • 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) {
finalList<FileSystemEntity> entities = snapshot;
returnListView.builder(
itemCount: entities.length,
itemBuilder: (context, index) {
returnCard(
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

PropertiesDescription
loadingScreenFor the loading screen, create a custom widget. A simple Centered CircularProgressIndicator is provided by default.
emptyFolderFor an empty screen, create a custom widget.
controllerFor an empty screen, create a custom widget.
hideHiddenEntityHide the files and folders that are hidden.
builderThis function allows you to create custom widgets and retrieve a list of entities List<FileSystemEntity>.

FileManagerController

PropertiesDescription
getSortedByThe sorting type that is currently in use is returned.
setSortByis used to set the sorting type. SortBy{ name, type, date, size }. ie: controller.sortBy(SortBy.date)
getCurrentDirectoryGet current Directory
getCurrentPathGet current path, similar to [getCurrentDirectory].
setCurrentPathSet current directory path by providing String of path, similar to [openDirectory]. List<FileSystemEntity>.
isRootDirectoryreturn true if current directory is the root. false, if the current directory not on root of the storage.
goToParentDirectoryJumps to the parent directory of currently opened directory if the parent is accessible.
openDirectoryOpen directory by providing Directory.
titleNotifierValueNotifier 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 ControlBackButtonControlBackButton(
controller: controller
child:Scaffold(
appBar:AppBar(...)
body:FileManager(
...
)
)
)

Others

PropertiesDescription
isFilecheck weather FileSystemEntity is File.
isDirectorycheck weather FileSystemEntity is Directory.
basenameGet 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)
formatBytesConvert bytes to human readable size.[getCurrentDirectory].
setCurrentPathSet current directory path by providing String of path, similar to [openDirectory]. List<FileSystemEntity>.
getFileExtensionReturn file extension as String. ie:- File("/../image.png") to "png".
getStorageListGet list of available storage in the device, returns an empty list if there is no storage List<Directory>
createFolderCreates the directory if it doesn't exist. Requires currentPath and Name of the Directory.

ExampleExampleExampleExample

Show some ❤️ and ⭐ the repo

GitHub Repo starsGitHub forksGitHub followers

Project Created & Maintained By

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.

About

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.

Topics

Resources

Stars

69 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages