Flutter 桌面端如何选择文件夹
在Flutter桌面端应用中,如何实现让用户选择文件夹的功能?目前官方提供的文件选择器似乎主要支持文件选择,不太清楚是否有直接选择文件夹的API或第三方库可用。希望了解具体的实现方法,最好能提供代码示例或推荐可靠的插件方案。
2 回复
Flutter桌面端选择文件夹可使用file_selector插件。调用getDirectoryPath()方法打开系统文件夹选择对话框,返回所选路径。支持Windows、macOS和Linux。
更多关于Flutter 桌面端如何选择文件夹的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 桌面端选择文件夹,可以使用 file_selector 插件(推荐)或 file_picker 插件。以下是具体方法:
方法一:使用 file_selector(官方推荐)
1. 添加依赖
dependencies:
file_selector: ^1.1.3
2. 代码实现
import 'package:file_selector/file_selector.dart';
import 'package:flutter/material.dart';
class FolderSelectorExample extends StatelessWidget {
Future<void> _selectFolder() async {
final String? selectedPath = await getDirectoryPath();
if (selectedPath != null) {
print('选择的文件夹路径: $selectedPath');
// 在这里处理选择的文件夹路径
} else {
print('用户取消了选择');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: _selectFolder,
child: Text('选择文件夹'),
),
),
);
}
}
方法二:使用 file_picker
1. 添加依赖
dependencies:
file_picker: ^6.1.1
2. 代码实现
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
class FolderPickerExample extends StatelessWidget {
Future<void> _selectFolder() async {
String? selectedDirectory = await FilePicker.platform.getDirectoryPath();
if (selectedDirectory != null) {
print('选择的文件夹路径: $selectedDirectory');
// 在这里处理选择的文件夹路径
} else {
print('用户取消了选择');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: _selectFolder,
child: Text('选择文件夹'),
),
),
);
}
}
平台配置
Windows
无需额外配置。
macOS
在 macos/Runner/DebugProfile.entitlements 和 macos/Runner/Release.entitlements 中添加:
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
Linux
在 linux/my_application.cc 中添加文件选择权限。
推荐选择
- file_selector:Flutter 官方维护,与平台原生 API 更紧密集成
- file_picker:功能更丰富,支持多文件选择等高级功能
根据你的具体需求选择合适的插件即可。

