DevsOnFlutter / 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.
https://pub.dev/packages/file_manager
BSD 3-Clause "New" or "Revised" License
61 stars 18 forks source link
dart file-manager flutter flutter-package hacktoberfest hacktoberfest2021 widget

File Manager

FileManager-Banner

GitHub GitHub code size in bytes GitHub top language GitHub language count GitHub 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.

<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>

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.

or use FileManager to request permission at runtime.

  // request permission
  await FileManager.requestFilesAccessPermission();

Basic setup

The complete example is available here.

Required parameter for FileManager are controller and builder

final FileManagerController controller = FileManagerController();

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

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(
        ...
      )
    )
  )

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.

Example Example Example Example

Show some :heart: and :star: the repo

GitHub Repo stars GitHub forks GitHub 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: