Flutter多端上传文件夹并按.gitignore规则过滤文件
在Flutter/Dart中处理.gitignore规则筛选文件
你可以使用gitignore_parser这个Dart库来解析并应用.gitignore规则,它完全兼容标准的.gitignore语法,能帮你自动排除符合规则的文件。
步骤1:添加依赖
在项目的pubspec.yaml中加入这个库:
dependencies: gitignore_parser: ^0.2.0
执行flutter pub get完成依赖安装。
步骤2:实现文件筛选逻辑
下面是完整的示例代码,会递归遍历目标文件夹,读取并应用.gitignore规则,最终返回符合要求的文件路径列表:
import 'dart:io'; import 'package:gitignore_parser/gitignore_parser.dart'; Future<List<String>> collectFilteredFiles(String targetFolder) async { final filteredPaths = <String>[]; final folderDir = Directory(targetFolder); // 读取并解析.gitignore(如果存在) Gitignore? ignoreRules; final gitignorePath = '$targetFolder/.gitignore'; if (await File(gitignorePath).exists()) { final ignoreContent = await File(gitignorePath).readAsString(); ignoreRules = Gitignore.parse(ignoreContent, baseDir: folderDir); } // 递归遍历所有文件 await for (final entity in folderDir.list(recursive: true)) { if (entity is File) { // 判断当前文件是否需要被排除 final shouldExclude = ignoreRules?.shouldIgnore(entity.path) ?? false; if (!shouldExclude) { filteredPaths.add(entity.path); } } } return filteredPaths; }
额外说明
- 该库支持所有标准.gitignore语法:通配符(
*、?)、目录匹配(/结尾)、否定规则(!开头表示不排除该文件)、注释(#开头)等。 - 针对Web端:由于Web无法直接访问本地文件系统,需先通过文件选择器(比如
file_picker库)让用户选择文件夹,获取所有文件列表后,再从列表中找到.gitignore文件并解析,最后完成筛选。 - 路径兼容性:Dart的文件路径会自动适配Windows/macOS/Linux不同平台,无需手动处理分隔符问题。
内容的提问来源于stack exchange,提问作者redDwarf
相关产品推荐
相关产品推荐

