文件管理器

FileManager 是一个出色的 widget,允许您管理文件和文件夹、选择文件和文件夹,以及更多功能。设计上感觉就像 Flutter 框架的一部分。

兼容性

✅   Android

✅   Linux

❌   Windows (进行中)

❌   Web

❌   MacOS (活跃 issue: MacOS 支持)

❌   iOS (活跃 issue: iOS 支持)

用法

请务必查看 示例 以获取更多详情。

安装

依赖项 将以下行添加到 pubspec.yaml

dependencies:
  file_manager: ^1.0.0

为应用程序授予存储权限

Android: 除了需要在 android/app/src/main/AndroidManifest.xml 中添加 WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE

<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"/>
...
</manifest>

另外,为 Android 10 添加

    <application
      android:requestLegacyExternalStorage="true"   
      ...

您还需要运行时权限请求
手动从应用设置中允许存储权限,或者您可以使用诸如 permission_handler 之类的包。

基本设置

完整的示例可在 此处 找到。

FileManager 的必需参数是 controllerbuilder

  • controller 控制器更新值并通知其侦听器,并且每当用户使用关联的 FileManagerController 修改路径或更改排序类型时,FileManager 都会适当地更新自身。
final FileManagerController controller = FileManagerController();
  • builder 此函数允许您创建自定义小部件并检索实体列表 List<FileSystemEntity>.

示例代码

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

属性 描述
loadingScreen 对于加载屏幕,创建一个自定义小部件。默认提供了一个简单的居中 CircularProgressIndicator。
emptyFolder 对于空屏幕,创建一个自定义小部件。
控制器 对于空屏幕,创建一个自定义小部件。
hideHiddenEntity 隐藏隐藏的文件和文件夹。
builder 此函数允许您创建自定义小部件并检索实体列表 List<FileSystemEntity>.

FileManagerContoller

属性 描述
getSortedBy 返回当前正在使用的排序类型。
setSortedBy 用于设置排序类型。SortBy{ name, type, date, size }
getCurrentDirectory 获取当前目录
getCurrentPath 获取当前路径,与 [getCurrentDirectory] 类似。
setCurrentPath 通过提供路径的 String 来设置当前目录路径,与 [openDirectory] 类似。List<FileSystemEntity>.
isRootDirectory 如果当前目录是根目录,则返回 true。如果当前目录不在存储的根目录上,则返回 false。
goToParentDirectory 如果父目录可访问,则跳转到当前打开目录的父目录。
openDirectory 通过提供 Directory 来打开目录。
titleNotifier 当前目录基本名称的 ValueNotifier

其他

属性 描述
isFile 检查 FileSystemEntity 是否是文件。
isDirectory 检查 FileSystemEntity 是否是目录。
basename 获取目录或文件的基本名称。提供 FileDirectoryFileSystemEntity 并将名称作为 String 返回。如果您想隐藏文件的扩展名,可以使用可选参数 showFileExtension。例如 controller.dirName(dir, true)
formatBytes 将字节转换为人类可读的大小。[getCurrentDirectory]。
setCurrentPath 通过提供路径的 String 来设置当前目录路径,与 [openDirectory] 类似。List<FileSystemEntity>.
getStorageList 获取设备上可用存储的列表,如果没有存储则返回空列表 List<Directory>
createFolder 如果目录不存在,则创建它。需要 currentPath 和目录名称。
Example Example Example Example

GitHub

https://github.com/DevsOnFlutter/file_manager