Flutter文件管理器插件explorer的使用
Flutter文件管理器插件explorer的使用
explorer
通用的文件浏览器UI插件,用于导航文件、FTP等。
支持自定义提供程序和任何平台。
Showcase
| 上下文菜单 | 操作 | 新建与上传 |
|---|---|---|
![]() |
![]() |
![]() |
Getting Started
在您的Flutter项目中添加依赖项:
dependencies:
explorer: any
导入必要的库:
/// 主要导入
import 'package:explorer/explorer.dart';
/// 导入用于[IoExplorerProvider]。仅适用于IO(不适用于Web)
import 'package:explorer/explorer_io.dart';
Api overview
ExplorerController
| 参数 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
| provider | 负责导航任何类型的文件结构的实体,例如IoExplorerProvider用于IO | [x] | - |
Explorer
| 参数 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
| controller | 已初始化的ExplorerController实例 | [x] | - |
| builder | 用于完全自定义UI的构建器回调 | [x] | - |
| bottomBarBuilder | 底部栏的附加构建器 | [ ] | - |
| uploadFiles | 点击上传文件操作时调用的回调(只有当回调存在时才显示此操作) | [ ] | - |
| filePressed | 文件被按下时调用的回调 | [ ] | - |
ExplorerToolbar
顶部工具栏,带有面包屑和操作。
ExplorerActionView
带有实际命令的操作视图(复制/移动到这里等)。
ExplorerFilesGridView
以网格形式显示文件。
Examples
Simple example
完整代码见 example目录
/// 在initState中初始化控制器
_controller = ExplorerController(
provider: IoExplorerProvider(
entryPath: '/path/to/entry', // 对于IO探索器,传递一些入口路径
),
)
Explorer(
controller: _controller,
// 自定义UI,通过Explorer和您自己的小部件!
builder: (_) => [
ExplorerToolbar(),
ExplorerActionView(),
ExplorerFilesGridView(),
],
// 当在探索器中点击文件时调用的回调
filePressed: (file) {
if (file.size > 200000) {
final snackBar =
SnackBar(content: Text('不能打开大于200KB的文件'));
// 在widget树中找到Scaffold并使用它来显示Snack Bar。
ScaffoldMessenger.of(context).showSnackBar(snackBar);
return;
}
}
)
Custom provider
您需要实现ExplorerProvider并将结果作为提供程序传递给ExplorerController。您可以创建任何提供程序:FTP、REST API等。
abstract class ExplorerProvider {
/// 探索器的起始路径
String get entryPath;
/// 探索器的实际路径
String get currentPath;
/// 导航到特定路径
Future<List<Entry>> go(String path);
/// 在[currentPath]创建新目录
Future<ExplorerDirectory> newDirectory(String name);
/// 在[currentPath]创建新文件
Future<ExplorerFile> newFile(String name);
/// 递归删除[currentPath]的文件或目录
Future<void> remove(Entry name);
/// 复制文件或目录
Future<void> copy(Entry from, Entry to);
}
完整示例代码
以下是一个完整的示例代码,展示了如何在Flutter中使用explorer插件:
import 'dart:io';
import 'package:explorer/explorer_io.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:path_provider/path_provider.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final Directory appDocDir = await getApplicationDocumentsDirectory();
runApp(MyApp(appDocDir: appDocDir));
}
class MyApp extends StatefulWidget {
const MyApp({
required this.appDocDir,
Key? key,
}) : super(key: key);
final Directory appDocDir;
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late ExplorerController _controller;
[@override](/user/override)
void initState() {
_controller = ExplorerController(
provider: IoExplorerProvider(
entryPath: widget.appDocDir.path,
),
);
super.initState();
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
void filePressed(ExplorerFile file) {
if ((file.size ?? 0) > 200000) {
final snackBar =
SnackBar(content: Text('不能打开大于200KB的文件'));
// 在widget树中找到Scaffold并使用它来显示Snack Bar。
ScaffoldMessenger.of(context).showSnackBar(snackBar);
return;
}
}
[@override](/user/override)
Widget build(BuildContext context) => MaterialApp(
localizationsDelegates: [
ExplorerLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('ru', ''),
const Locale('fr', ''),
],
home: Scaffold(
body: Explorer(
controller: _controller,
builder: (_) => [
ExplorerToolbar(),
ExplorerActionView(),
ExplorerFilesGridView(),
],
filePressed: filePressed,
),
),
);
}
更多关于Flutter文件管理器插件explorer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文件管理器插件explorer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,file_explorer 插件可以帮助你实现文件管理功能,例如浏览文件、选择文件、创建文件夹等。然而,截至2023年,file_explorer 插件并不是一个广泛使用的插件,你可能需要寻找其他替代方案,如 file_picker 或 flutter_file_manager 等插件。
以下是一个使用 file_picker 插件的示例,它可以帮助你实现文件选择和管理功能:
1. 添加依赖
首先,在 pubspec.yaml 文件中添加 file_picker 插件的依赖:
dependencies:
flutter:
sdk: flutter
file_picker: ^5.2.5
然后运行 flutter pub get 来安装依赖。
2. 使用 file_picker 选择文件
以下是一个简单的示例,展示如何使用 file_picker 插件来选择文件:
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: FilePickerDemo(),
);
}
}
class FilePickerDemo extends StatefulWidget {
[@override](/user/override)
_FilePickerDemoState createState() => _FilePickerDemoState();
}
class _FilePickerDemoState extends State<FilePickerDemo> {
String _filePath = 'No file selected';
Future<void> _pickFile() async {
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
PlatformFile file = result.files.first;
setState(() {
_filePath = file.path ?? 'File path not available';
});
} else {
setState(() {
_filePath = 'No file selected';
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('File Picker Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Selected file:',
style: TextStyle(fontSize: 18),
),
Text(
_filePath,
style: TextStyle(fontSize: 16, color: Colors.blue),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _pickFile,
child: Text('Pick a file'),
),
],
),
),
);
}
}




