文件管理器
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_STORAGE 和 READ_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 的必需参数是 controller 和 builder
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 |
获取目录或文件的基本名称。提供 File、Directory 或 FileSystemEntity 并将名称作为 String 返回。如果您想隐藏文件的扩展名,可以使用可选参数 showFileExtension。例如 controller.dirName(dir, true) |
formatBytes |
将字节转换为人类可读的大小。[getCurrentDirectory]。 |
setCurrentPath |
通过提供路径的 String 来设置当前目录路径,与 [openDirectory] 类似。List<FileSystemEntity>. |
getStorageList |
获取设备上可用存储的列表,如果没有存储则返回空列表 List<Directory> |
createFolder |
如果目录不存在,则创建它。需要 currentPath 和目录名称。 |