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.entitlementsmacos/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:功能更丰富,支持多文件选择等高级功能

根据你的具体需求选择合适的插件即可。

回到顶部