如何在Flutter中打开Windows系统文件夹并获取自定义指定路径?
需求实现方案
path_provider本身仅支持获取系统预设的沙箱、公共存储等固定路径,不具备唤起交互界面让用户自主选择路径的能力,需要搭配文件选择类插件实现需求,具体实现流程如下:
1. 依赖引入
选用跨端适配完善的file_picker插件配合path_provider使用,在pubspec.yaml中添加依赖:
dependencies: flutter: sdk: flutter path_provider: ^2.1.0 file_picker: ^6.1.1
执行flutter pub get完成依赖安装。
2. 端侧权限配置
- Android端:在
android/app/src/main/AndroidManifest.xml中添加存储权限:<!-- Android 13以下读写外部存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Android 13及以上媒体/文档访问权限按需添加 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> - iOS端:在
ios/Runner/Info.plist中添加文档访问权限配置:<key>LSSupportsOpeningDocumentsInPlace</key> <true/> <key>UIFileSharingEnabled</key> <true/> - 桌面端(Windows/macOS/Linux)无需额外配置权限,直接调用即可。
3. 核心功能代码
调用插件方法唤起系统原生的文件选择交互界面,即可获取用户选中的自定义路径:
import 'package:file_picker/file_picker.dart'; import 'package:path_provider/path_provider.dart'; // 自定义路径选择方法 Future<String?> getCustomPath() async { // 唤起目录选择界面,返回用户选中的路径 String? selectedDir = await FilePicker.platform.getDirectoryPath(); // 如果用户取消选择,默认返回path_provider获取的应用文档目录 selectedDir ??= (await getApplicationDocumentsDirectory()).path; return selectedDir; }
注意:如果需要选择单个/多个文件而非目录,替换调用FilePicker.platform.pickFiles()方法即可,返回结果中可获取选中文件的路径、文件名等信息
4. 后续操作
拿到用户选中的路径后,即可直接在该路径下执行文件读写、打印资源导出、文件打开等目标操作。
内容的提问来源于stack exchange,提问作者Muhammad Arbaz Zafar
相关产品推荐
相关产品推荐

