Filex

适用于 Flutter 的可配置文件浏览器小部件。

用法

简单

import 'package:filex/filex.dart';
import 'package:path_provider/path_provider.dart';

dir = await getApplicationDocumentsDirectory();
final controller = FilexController(path: dir.path);
Filex(controller: controller);

带前导和尾随构建器

import 'package:filex/filex.dart';

Filex(
  compact: true,
  directory: Directory("some_dir_path"),
  directoryTrailingBuilder: (context, item) {
    return GestureDetector(
      child: Padding(
        padding: const EdgeInsets.fromLTRB(0, 0, 3.0, 0),
        child: Icon(Icons.file_download,
          color: Colors.grey, size: 20.0)),
        onTap: () => doSomething(item));
})

尾随和前导选项为:fileTrailingBuilderdirectoryLeadingBuilderdirectoryTrailingBuilder

控制器

包含添加和删除目录的对话框

class FileExplorer extends StatelessWidget {
@override
Widget build(BuildContext context) {
   final controller = FilexController(path: dir.path);
   return Scaffold(
      appBar: AppBar(
        title: const Text("Files"),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.add),
            onPressed: () => controller.addDirectory(context),
          )
        ],
      ),
      body: Filex(
        controller: controller,
        actions: <PredefinedAction>[PredefinedAction.delete],
      ),
    );
  }
}

可用的控制器操作

controller.delete(DirectoryItem item) :删除文件或目录

controller.createDirectory(String name) :创建目录

controller.ls() :列出当前目录

controller.dispose() :完成使用后释放bloc

自定义操作

可以在滑动手势菜单中添加自定义操作

Filex(
    controller: controller,
    actions: <PredefinedAction>[PredefinedAction.delete],
    extraActions: <FilexSlidableAction>[
    FilexSlidableAction(
        name: "My action",
        iconData: Icons.file_upload,
        color: Colors.blue,
        onTap: customAction,
    )
    ],
)

void customAction(BuildContext context, DirectoryItem item) {
    // action here
}

变更订阅

提供了目录列表项的流,可用于实现
变更回调

StreamSubscription<List<DirectoryItem>> _sub;
_sub = controller.changefeed.listen((items) {
  // do something
});

GitHub

https://github.com/synw/filex