You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:53:25